Willkommen bei ADO

Mit Microsoft® ActiveX® Data Objects (ADO) können Ihre Clientanwendungen über einen OLE DB-Provider auf Daten aus einem Datenbankserver zugreifen und diese bearbeiten.

ADO Programmer's Reference

ADO unterstützt wichtige Funktionen zum Erstellen von Client/Server-Anwendungen und webbasierten Anwendungen. Die Hauptvorteile sind einfache Bedienung, Schnelligkeit sowie der geringe Bedarf an Arbeitsspeicher und Speicherplatz. ADO bietet auch Remote Data Service (RDS), wodurch es möglich ist, Daten von einem Server in eine Clientanwendung oder auf eine Webseite zu verschieben, die Daten auf dem Client zu bearbeiten und die aktualisierten Daten dann im gleichen Arbeitsgang wieder auf den Server zu übertragen.

Weitere Informationen über ADO finden Sie unter Übersicht über ADO. Besuchen Sie die Microsoft Webseite unter http://www.microsoft.com/data/ado, um Informationen zur aktuellen ADO-Version zu erhalten.

ADO-Erweiterungen für DDL und Security (ADOX) Programmer's Reference

ActiveX Data Objects-Erweiterungen für DDL und Security (ADOX) stellt eine Erweiterung von ADO dar und bringt Objekte ein, um Schemaobjekte (wie beispielsweise Tabellen und Prozeduren) zu erstellen, zu verändern und zu löschen. Außerdem enthält es Sicherheitsobjekte zum Verwalten von Benutzern und Gruppen sowie zum Erteilen und Widerrufen von Berechtigungen für Objekte.

Weitere Informationen über ADOX finden Sie unter Übersicht über ADOX. Besuchen Sie die Microsoft Webseite unter http://www.microsoft.com/data/ado, um Informationen zur aktuellen ADOX-Version zu erhalten.

ADO MD Programmer's Reference

ActiveX Data Objects (Multidimensional) (ADO MD) erweitert ADO auf für mehrdimensionale Daten spezifische Objekte und ermöglicht Ihnen das Durchsuchen mehrdimensionaler Schemas, das Abfragen eines Cubes und das Abrufen der Ergebnisse.

Weitere Informationen über ADO MD finden Sie unter Übersicht über ADO MD. Besuchen Sie die Microsoft Webseite unter http://www.microsoft.com/data/ado, um Informationen zur aktuellen ADO MD-Version zu erhalten.


Microsoft ADO Programmer's Reference

Mit Microsoft® ActiveX® Data Objects (ADO) können Sie eine Anwendung schreiben, mit deren Hilfe Sie über einen OLE DB-Provider auf Daten auf einem Datenbankserver zugreifen und diese bearbeiten können. Die Hauptvorteile sind einfache Bedienung, Schnelligkeit sowie der geringe Bedarf an Arbeitsspeicher und Speicherplatz. ADO unterstützt wichtige Funktionen zum Erstellen von Client/Server-Anwendungen und webbasierten Anwendungen.

ADO bietet auch Remote Data Service (RDS), wodurch es möglich ist, Daten von einem Server in eine Clientanwendung oder auf eine Webseite zu verschieben, die Daten auf dem Client zu bearbeiten und die aktualisierten Daten dann im gleichen Arbeitsgang wieder auf den Server zu übertragen. RDS, zuvor als Microsoft Remote Data Service 1.5 herausgegeben, wurde mit dem ADO-Programmiermodell kombiniert, um die clientbasierte Remotebearbeitung von Daten zu vereinfachen.

Weitere Informationen über ADO und die Integration von RDS finden Sie unter Erste Schritte mit ADO.


Neue Features in ADO

Diese Version bietet Ihnen diverse neue Features und eine erweiterte Dokumentation.

Neue Features

Seek und Index

Mit der Seek-Methode und der Index-Eigenschaft können Sie Zeilen in einem Recordset jetzt schnell auf Indexbasis finden.

Zeilenaktualisierung und Synchronisation

Sie können Zeilenaktualisierungen und Synchronisation für Recordset-Objekte, die durch eine JOIN-Operation erstellt wurden, benutzerdefiniert steuern. Sieben neue dynamische Eigenschaften steuern das Verhalten der fünf vorhandenen Methoden.

Zusätzliche Dokumentation

Microsoft OLE DB Persistence Provider

Der Microsoft OLE DB Persistence Provider speichert ein Recordset-Objekt und stellt es in einer Datei wieder zur Verfügung. Dies geschieht im Zusammenwirken mit den Methoden Save und Open des Recordset-Objekts. Ab dieser Version kann ein Recordset im Format XML (Extensible Markup Language) gespeichert werden, dem Standardinstrument zum Festlegen von vom Benutzer angegebenen Tags für Daten, die durch das Internet übermittelt werden.

Microsoft Data Shaping Service für OLE DB

Der Microsoft Data Shaping Service für OLE DB, der Datenstrukturierung unterstützt, bietet jetzt folgende Features:

  • Neustrukturieren eines zuvor strukturierten Recordsets. Zur Unterstützung dieses Features verfügen Recordset-Objekte nunmehr über eine Name-Eigenschaft, die für die Dauer der Vebindung besteht.

  • Auf jeder Ebene eines strukturierten Recordset-Objekts – also nicht nur für ein unmittelbar untergeordnetes Element, das zu einem übergeordneten Element gehört – können Sie Aggregatberechnungen in einer Spalte durchführen. Dieses Feature bildet mit Hilfe vollständiger Kapitelnamen einen Pfad zur gewünschten Ebene und Spalte.

  • Bei parametrisierten COMPUTE-Befehlen kann eine beliebige Anzahl von eingreifenden COMPUTE-Klauseln zwischen der PARAMETER-Klausel und dem Parameter-Argument stehen.

Microsoft OLE DB Remoting Provider

Der Serviceprovider Microsoft OLE DB Remoting Provider wird zum Standard-Serviceprovider und erhält neue dynamische Eigenschaften für verbesserte Leistung, größere Steuerungsmöglichkeiten durch den Benutzer und Abwärtskompatibilität mit ADO 2.0.

Microsoft Cursordienst für OLE DB

Der Microsoft Cursordienst für die OLE DB-Servicekomponente ergänzt die Cursor-Unterstützungsfunktionen der Datenprovider. Daraus resultiert, dass der Benutzer eine relativ einheitliche Funktionalität aller Datenprovider wahrnimmt.


Erste Schritte mit ADO

Dieser Abschnitt enthält eine Reihe von Themen, die Sie in der vorgegebenen Reihenfolge durchgehen können. Klicken Sie am Ende jedes Themas einfach auf den Link zum nächsten Thema. Folgende Themen werden erläutert:

  • Lösungen für lokalen Datenzugriff

  • Das zugrunde liegende ADO-Programmiermodell

  • Das ADO-Programmiermodell im Detail

  • Das ADO-Programmiermodell mit Objekten

  • Das ADO-Objektmodell – Zusammenfassung

  • Lösungen für Remote-Datenzugriff

  • Das zugrunde liegende RDS-Programmiermodell

  • Das RDS-Programmiermodell im Detail

  • Das RDS-Programmiermodell mit Objekten

  • Das RDS-Objektmodell – Zusammenfassung

Weiter Lösungen für lokalen Datenzugriff


Lösungen für lokalen Datenzugriff

Das Problem

Sie möchten eine einfache, konsistente Anwendungsprogramm-Schnittstelle (application programming interface = API), mit der Anwendungen auf eine große Anzahl von Datenquellen zugreifen und diese verändern können. Eine Datenquelle kann aus einer einfachen Textdatei bestehen, aus einer komplexen Gruppe heterogener Datenbanken oder aus einer anderen Struktur, die erst noch erfunden wird. Darüber hinaus sollte die API die Mittel zum Zugriff auf die Datenquelle und die Bearbeitung derselben nicht voraussetzen.

Obwohl Ihre besonderen Bedürfnisse wie oben beschrieben aussehen, handelt es sich bei der Datenquelle in der Regel um eine relationale Datenbank, die den Open Database Connectivity-Standard (ODBC-Standard) unterstützt und mit Befehlen verändert wird, die in Structured Query Language (SQL) geschrieben sind.

Als allgemeine Lösung zu diesem Problem bietet Microsoft OLE DB an, eine Reihe von Component Object Model-Schnittstellen (COM-Schnittstellen), über die Sie gleichermaßen auf Daten in verschiedenen Informationsquellen zugreifen können. Die OLE DB-Anwendungsprogramm-Schnittstelle bietet eine optimale Funktionalität bei einer großen Anzahl von Anwendungen, sie erfüllt aber nicht den Anspruch der Einfachheit.

Sie benötigen eine API, die als Brücke zwischen der Anwendung und OLE DB funktioniert. Mit ActiveX Data Objects (ADO) verfügen wir über eine solche Brücke.

Die Lösung

ADO definiert ein Programmiermodell – eine Folge von Aktivitäten, die für den Zugriff auf eine Datenquelle und für ihre Aktualisierung erforderlich ist. Das Programmiermodell fasst die gesamte Funktionalität von ADO zusammen.

Das Programmiermodell setzt ein Objektmodell voraus – eine Reihe von Objekten, die dem Programmiermodell entsprechen und es implementieren. Objekte besitzen Methoden, die eine Operation an Daten durchführen, und Eigenschaften, die entweder ein Attribut der Daten darstellen oder das Verhalten einer Objektmethode kontrollieren.

Mit den Objekten sind Ereignisse verbunden, die darüber informieren, dass eine Operation stattgefunden hat oder ansteht.

Weiter Das zugrunde liegende ADO-Programmiermodell


Das zugrunde liegende ADO-Programmiermodell

ADO stellt die Mittel zur Verfügung, damit Sie die folgenden Aktionen nacheinander durchführen können:

  • Herstellen einer Verbindung zu einer Datenquelle. Optional können Sie sicherstellen, dass alle Änderungen an der Datenquelle entweder erfolgreich oder gar nicht stattfinden.

  • Angeben eines Befehls, um auf die Datenquelle zuzugreifen, optional mit variablen Parametern oder optimiert zur Steigerung der Leistung.

  • Ausführen des Befehls.

  • Wenn durch den Befehl Daten in Form von Zeilen in einer Tabelle zurückgegeben werden, können Sie die Zeilen in einem Zwischenspeicher speichern, den Sie auf einfache Weise überprüfen, bearbeiten oder verändern können.

  • Ggf. Aktualisieren der Datenquelle mit Änderungen aus dem Zwischenspeicher.

  • Verfügbarkeit allgemeiner Mittel zur Fehlersuche (in der Regel als Folge der Herstellung einer Verbindung oder der Ausführung eines Befehls).

In der Regel werden alle diese Schritte mit dem beschriebenen Programmiermodell abgedeckt. Wir möchten jedoch darauf hinweisen, dass ADO so flexibel ist, dass es auch nützlich sein kann, Arbeiten nur zum Teil innerhalb des Modells durchzuführen. Sie können z. B. Daten aus einer Datei direkt in den Zwischenspeicher der Zeilen speichern und dann die ADO-Ressourcen verwenden, um die Daten zu überprüfen.

Weiter Das ADO-Programmiermodell im Detail


Das ADO-Programmiermodell im Detail

Die folgenden Elemente sind Hauptbestandteile des ADO-Programmiermodells:

  • Verbindung

  • Befehl

  • Parameter

  • Recordset

  • Feld

  • Fehler

  • Eigenschaft

  • Auflistung

  • Ereignis

Verbindung

Der Zugriff der Anwendung auf die Datenquelle findet über eine Verbindung statt, der Umgebung, die zum Austausch von Daten erforderlich ist. Die Anwendung kann direkt auf die Datenquelle zugreifen (dies wird auch Zwei-Ebenen-System genannt) oder indirekt über einen Vermittler wie Microsoft® Internet Information Server (dies wird auch Drei-Ebenen-System genannt).

Das Objektmodell verkörpert das Konzept einer Verbindung mit dem Connection-Objekt.

Eine Transaktion gibt den Anfang und das Ende einer Reihe von Datenzugriffsoperationen an, die in einer Verbindung vorkommen. ADO stellt sicher, dass Änderungen an Datenquellen, die aus Operationen in einer Transaktion resultieren, entweder alle erfolgreich oder gar nicht abgeschlossen werden.

Wenn Sie die Transaktion abbrechen oder wenn eine Operation fehlschlägt, sieht das Endergebnis so aus, als ob keine der Operationen in der Transaktion stattgefunden hätte. Die Datenquelle ist verglichen mit ihrem Zustand zu Beginn der Transaktion unverändert.

Das Objektmodell setzt das Konzept einer Transaktion nicht direkt um, aber es stellt die Transaktion in einer Reihe von Connection-Objektmethoden dar.

ADO greift auf Daten und Dienste von OLE DB-Providern zu. Das Connection-Objekt wird verwendet, um einen bestimmten Provider und Parameter anzugeben. So kann beispielsweise Remote Data Service (RDS) explizit aufgerufen werden oder implizit. Letzteres geschieht durch den Microsoft OLE DB Remoting Provider. (In der Übung zu RDS finden Sie ein Beispiel für das Aufrufen von RDS mit dem OLE DB Remoting Provider in Schritt 2.)

Befehl

Durch einen Befehl, der in einer aufgebauten Verbindung ausgegeben wird, wird die Datenquelle bearbeitet. In der Regel fügt der Befehl Daten in die Datenquelle ein, löscht oder aktualisiert sie oder ruft Daten in Form von Zeilen in einer Tabelle ab.

Das Objektmodell setzt das Konzept eines Befehls mit dem Command-Objekt um. Durch das Vorhandensein eines Command-Objekts kann ADO die Ausführung des Befehls optimieren.

Parameter

In vielen Fällen benötigen Befehle variable Teile, Parameter, die vor Ausgabe eines Befehls verändert werden können. Sie können einen Datenabrufbefehl z. B. mehrmals wiederholen, wobei die Angaben zu den abzurufenden Daten jedes Mal unterschiedlich sind.

Parameter sind besonders zum Ausführen von Befehlen nützlich, die sich wie Funktionen verhalten. In diesem Fall wissen Sie, was der Befehl tut, aber nicht unbedingt, wie er funktioniert. Sie geben z. B. einen Befehl für eine Banküberweisung aus, durch den ein Konto belastet wird und auf dem anderen Konto eine Gutschrift erfolgt. Sie geben den zu überweisenden Betrag als Parameter an.

Das Objektmodell setzt das Konzept eines Parameters mit dem Parameter-Objekt um.

Recordset

Handelt es sich bei dem Befehl um eine Abfrage, die Daten als mit Informationen gefüllte Zeilen in einer Tabelle zurückgibt (d. h. die Abfrage gibt Zeilen zurück), werden diese Zeilen in einem lokalen Speicher platziert.

Das Objektmodell setzt diesen Speicher als Recordset-Objekt um. Es gibt jedoch kein Objekt, das eine einzelne Zeile eines Recordset-Objekts darstellt.

Das Recordset-Objekt ist das wichtigste Mittel zum Untersuchen und Bearbeiten von Daten in den Zeilen. Mit dem Recordset-Objekt können Sie Folgendes tun:

  • Angeben, welche Zeilen für die Untersuchung verfügbar sind

  • Durchgehen der Zeilen

  • Angeben der Reihenfolge, in der die Zeilen durchgegangen werden können

  • Hinzufügen, Ändern oder Löschen von Zeilen

  • Aktualisieren der Datenquelle mit geänderten Zeilen

  • Verwalten des Gesamtzustands des Recordset-Objekts

Feld

Die Zeile eines Recordset-Objekts besteht aus einem oder mehreren Feldern. Wenn Sie sich das Recordset-Objekt als zweidimensionale Tabelle vorstellen, bilden die Felder Spalten. Jedes Feld (jede Spalte) enthält in den Attributen einen Namen, Datentyp und Wert. Dieser Wert enthält die eigentlichen Daten der Datenquelle.

Das Objektmodell setzt ein Feld als Field-Objekt um.

Wenn Sie die Daten in der Datenquelle bearbeiten möchten, verändern Sie den Wert der Field-Objekte in den Zeilen des Recordset-Objekts. Abschließend werden Änderungen an dem Recordset-Objekt an die Datenquelle weitergeleitet. Optional kann auch durch die Methoden zum Transaktionsmanagement auf dem Connection-Objekt sichergestellt werden, dass die Änderungen erfolgreich sind oder alle fehlschlagen.

Fehler

Fehler können zu jeder Zeit in der Anwendung auftreten, in der Regel weil eine Verbindung nicht hergestellt oder ein Befehl nicht ausgeführt werden kann oder weil eine Operation auf einem Objekt durchgeführt werden soll, das sich nicht in einem geeigneten Zustand befindet (z. B. bei dem Versuch, ein Recordset-Objekt zu verwenden, das nicht initialisiert worden ist).

Das Objektmodell setzt einen Fehler als Error-Objekt um.

Jeder Fehler erstellt ein oder mehrere Error-Objekte. Der nächste auftretende Fehler löscht den vorherigen Satz von Error-Objekten.

Eigenschaft

Jedes ADO-Objekt besitzt einen Satz eindeutiger Eigenschaften, die das Verhalten des Objekts entweder beschreiben oder steuern.

Es gibt zwei Arten von Eigenschaften: integrierte und dynamische. Integrierte Eigenschaften sind Teil des ADO-Objekts und immer verfügbar. Dynamische Eigenschaften werden der Properties-Auflistung des ADO-Objekts durch den zugrunde liegenden Datenprovider hinzugefügt und sind nur vorhanden, während der betreffende Provider verwendet wird.

Das Objektmodell stellt eine Eigenschaft als Property-Objekt dar.

Auflistung

ADO verfügt über Auflistungen, eine Art von Objekt, das zur leichteren Handhabung andere Objekte eines bestimmten Typs enthält. Die Objekte in der Auflistung können mit einer Auflistungsmethode entweder nach Namen, als Textzeichenfolge oder nach Ordinalzahlen als Ganzzahl abgerufen werden.

ADO verfügt über vier Arten von Auflistungen:

  • Das Connection-Objekt umfasst die Errors-Auflistung, in der alle Error-Objekte enthalten sind, die als Reaktion auf einen einzelnen Fehler bezüglich der Datenquelle erstellt werden.

  • Das Command-Objekt umfasst die Parameters-Auflistung, in der alle Parameter-Objekte enthalten sind, die für dieses Command-Objekt gelten.

  • Das Recordset-Objekt umfasst die Fields-Auflistung, in der alle Field-Objekte enthalten sind, die die Spalten dieses Recordset-Objekts definieren.

  • Darüber hinaus umfassen jedes Connection-, Command-, Recordset- und Field-Objekt eine Properties-Auflistung, in der alle Property-Objekte enthalten sind, die für die entsprechenden Objekte gelten.

ADO-Objekte besitzen Eigenschaften, in denen Sie Werte mit normalen Datentypen wie INTEGER, CHARACTER oder BOOLEAN setzen oder abrufen können. Bestimmte Eigenschaften können jedoch auch Werte des Datentyps "COLLECTION OBJECT" zurückgeben. Das Auflistungsobjekt hat wiederum Methoden, um andere für die Auflistung geeignete Objekte zu speichern und abzurufen.

Das Recordset-Objekt verfügt z. B. über eine Properties-Eigenschaft, die ein Auflistungsobjekt zurückgibt. Dieses Auflistungsobjekt verfügt über Methoden zum Speichern und Abrufen von Property-Objekten, die Attribute dieses Recordset-Objekts beschreiben.

Ereignisse

Ereignisse sind Benachrichtigungen, dass bestimmte Operationen stattfinden werden oder bereits stattgefunden haben. Im Allgemeinen können Sie Ereignisse verwenden, um eine Anwendung, die aus mehreren asynchronen Aufgaben besteht, effizient zu organisieren.

Das Objektmodell setzt Ereignisse nicht direkt um, es stellt sie als Aufrufe von Ereignisbehandlungsroutinen dar.

Mit Ereignisbehandlungsroutinen, die vor Beginn der Operation aufgerufen werden, können Sie Operationsparameter überprüfen und bearbeiten, danach können Sie die Operation abbrechen oder zu Ende führen.

Mit Ereignisbehandlungsroutinen, die nach Beendigung der Operation aufgerufen werden, werden Sie über den Abschluss einer asynchronen Operation informiert. Mehrere Operationen sind verbessert worden, so dass sie optional asynchron ausgeführt werden können. Eine Anwendung, die eine asynchrone Recordset.Open-Operation startet, wird z. B. durch ein Ereignis zur Beendigung der Ausführung erkannt, wenn die Operation beendet ist.

  • Weitere Informationen über Ereignisse finden Sie unter ADO-Ereignismodell und asynchrone Operationen.

Weiter Das ADO-Programmiermodell mit Objekten


Das ADO-Programmiermodell mit Objekten

Das Ziel von ADO liegt darin, auf Datenquellen zuzugreifen, sie zu bearbeiten und die Datenquellen zu aktualisieren, und das Programmiermodell enthält die Folge von Aktivitäten, die zum Erreichen dieses Ziels erforderlich ist. ADO stellt Klassen und Objekte zur Verfügung, mit denen jede der folgenden Aktivitäten ermöglicht wird:

  • Stellen Sie eine Verbindung zu einer Datenquelle her (Connection). Wahlweise können Sie auch eine Transaktion beginnen.

  • Erstellen Sie optional ein Objekt, das einen SQL-Befehl darstellt (Command).

  • Geben Sie optional Spalten, Tabellen und Werte als variable Parameter in den SQL-Befehl ein (Parameter).

  • Führen Sie den Befehl aus (Command, Connection oder Recordset).

  • Gibt der Befehl Zeilen zurück, speichern Sie die Zeilen in einem Speicherobjekt (Recordset).

  • Erstellen Sie optional eine Ansicht des Speicherobjekts, so dass Sie die Daten sortieren, filtern und sich durch sie bewegen können (Recordset).

  • Bearbeiten Sie die Daten, indem Sie Zeilen und Spalten hinzufügen, löschen oder verändern (Recordset-Objekt).

  • Aktualisieren Sie die Datenquelle, falls angebracht, mit den Änderungen aus dem Speicherobjekt (Recordset).

  • Wenn Sie eine Transaktion verwendet haben, akzeptieren Sie die Änderungen, die während der Transaktion gemacht wurden, oder lehnen Sie sie ab. Beenden Sie die Transaktion (Connection).

Weiter Das ADO-Objektmodell – Zusammenfassung


Das ADO-Objektmodell - Zusammenfassung

Das ADO-Objektmodell – Zusammenfassung

ADO-Objekte – Zusammenfassung

Objekt | Beschreibung
Connection | Ermöglicht den Austausch von Daten.
Command | Stellt eine SQL-Anweisung dar.
Parameter | Stellt einen Parameter einer SQL-Anweisung dar.
Recordset | Ermöglicht das Bewegen durch und Bearbeiten von Daten.
Field | Stellt eine Spalte eines Recordset-Objekts dar.
Error | Stellt einen Fehler bei einer Verbindung dar.
Property | Stellt ein Merkmal eines ADO-Objekts dar.

ADO-Auflistungen - Zusammenfassung

Auflistung | Beschreibung
Errors | Alle Error-Objekte, die als Reaktion auf einen einzelnen Fehler in der Verbindung erstellt worden sind.
Parameters | Alle Parameter-Objekte, die mit einem Command-Objekt verbunden sind.
Fields | Alle Field-Objekte, die mit einem Recordset-Objekt verbunden sind.
Properties | Alle Property-Objekte, die mit einem Connection-, Command-, Recordset- oder Field-Objekt verbunden sind.

ADO-Ereignisbehandlungsroutinen – Zusammenfassung

ConnectionEvents | Beschreibung
BeginTransComplete, CommitTransComplete, RollbackTransComplete | Transaktionsmanagement – Benachrichtigung, dass die aktuelle Transaktion auf der Verbindung gestartet, ausgeführt oder zurückgesetzt wurde.
WillConnect, ConnectComplete, Disconnect | Verbindungsmanagement – Benachrichtigung, dass die aktuelle Verbindung starten wird oder gestartet oder beendet wurde.
WillExecute, ExecuteComplete | Befehlsausführungsmanagement – Benachrichtigung, dass die Ausführung des aktuellen Befehls auf der Verbindung starten wird oder beendet wurde.
InfoMessage | Information – Benachrichtung über zusätzliche Informationen zur aktuellen Operation.

RecordsetEvents | Beschreibung
FetchProgress, FetchComplete | Abfragestatus – Benachrichtigung über den Fortschritt der Datenabrufoperation oder die Beendigung der Abrufoperation.
WillChangeField, FieldChangeComplete | Feldänderungsmanagement – Benachrichtigung, dass sich der Wert des aktuellen Feldes ändert oder geändert hat.
WillMove, MoveComplete, EndOfRecordset | Navigationsmanagement – Benachrichtigung, dass sich die aktuelle Zeilenposition in einem Recordset-Objekt ändert, geändert hat oder das Ende des Recordset-Objekts erreicht wurde.
WillChangeRecord, RecordChangeComplete | Zeilenänderungsmanagement – Benachrichtigung, dass sich Daten in der aktuellen Zeile eines Recordset-Objekts ändern oder geändert haben.
WillChangeRecordset, RecordsetChangeComplete | Recordset-Änderungsmanagement – Benachrichtigung, dass sich Daten im aktuellen Recordset-Objekt ändern oder geändert haben.

Weiter Lösungen für Remote-Datenzugriff


Lösungen für Remote-Datenzugriff

Das Problem

Mit ADO kann eine Anwendung direkt auf die Datenquelle zugreifen und sie verändern (dies wird auch Zwei-Ebenen-System genannt). Besteht die Verbindung z. B. zu der Datenquelle mit den zu bearbeitenden Daten, handelt es sich um eine direkte Verbindung in einem System mit zwei Ebenen.

Sie möchten jedoch vielleicht auch indirekt über einen Vermittler wie Microsoft Internet Information Server (IIS) auf Datenquellen zugreifen. Dieser Aufbau wird auch Drei-Ebenen-System genannt. IIS ist ein Client/Server-System, das eine effiziente Möglichkeit für eine lokale (oder Client-) Anwendung bietet, ein Remote- (oder Server-) Programm über das Internet oder ein Intranet aufzurufen. Das Serverprogramm kann auf die Datenquelle zugreifen und optional die abgerufenen Daten verarbeiten.

Ihre Intranet-Webseite enthält z. B. eine Anwendung in Microsoft® Visual Basic®, Scripting Edition (VBScript), die eine Verbindung zu IIS aufbaut. IIS stellt wiederum eine Verbindung zur eigentlichen Datenquelle her, ruft die Daten ab und verarbeitet sie und gibt dann die verarbeiteten Daten an Ihre Anwendung zurück.

In diesem Beispiel hat Ihre Anwendung zu keinem Zeitpunkt eine direkte Verbindung zu der Datenquelle hergestellt, IIS war mit der Datenquelle verbunden. IIS hat über ADO auf die Daten zugegriffen.

Hinweis Die Client/Server-Anwendung muss nicht auf dem Internet oder einem Intranet basieren (d. h. sie muss nicht Web-basiert sein) – sie kann auch aus kompilierten Programmen auf einem LAN bestehen. In der Regel handelt es sich jedoch um eine Web-basierte Anwendung.

Da einige grafische Steuerelemente, z. B. ein Tabellen-Steuerelement, Kontrollkästchen oder eine Liste, ggf. die zurückgegebenen Daten verwenden, muss die einfache Handhabung der zurückgegebenen Daten durch ein grafisches Steuerelement gewährleistet sein.

Sie möchten eine einfache, effiziente Anwendungsprogramm-Schnittstelle, die Drei-Ebenen-Systeme unterstützt und Daten so einfach zurückgibt wie bei einem Zwei-Ebenen-System. Remote Data Service (RDS) ist diese Schnittstelle.

Die Lösung

RDS definiert ein Programmiermodell – eine Folge von Aktivitäten, die für den Zugriff auf eine Datenquelle und die Aktualisierung derselben erforderlich ist – zum Zugriff auf Daten über einen Vermittler wie Internet Information Server. Das Programmiermodell fasst die gesamte Funktionalität von RDS zusammen.

Das Programmiermodell setzt ein Objektmodell voraus – eine Reihe von Objekten, die dem Programmiermodell entsprechen und es implementieren. Objekte besitzen Methoden, die eine Operation an Daten durchführen, und Eigenschaften, die entweder ein Attribut der Daten darstellen oder das Verhalten einer Objektmethode kontrollieren.

Mit den Objekten sind Ereignisse verbunden, die darüber informieren, dass eine Operation stattgefunden hat oder ansteht.

Weiter Das zugrunde liegende RDS-Programmiermodell


Das zugrundeliegende RDS-Programmiermodell

RDS ist für Anwendungen in der folgenden Umgebung gedacht: Eine Clientanwendung gibt ein Programm an, das auf einem Server ausgeführt wird, und die Parameter, die für die Rückgabe der gewünschten Daten erforderlich sind. Das auf dem Server aufgerufene Programm greift auf die angegebene Datenquelle zu, ruft die Daten ab, verarbeitet die Daten optional und gibt die Ergebnisse an die Clientanwendung in einer einfach zu verwendenden Form zurück. RDS stellt die Mittel zur Verfügung, damit Sie die folgenden Aktivitäten nacheinander durchführen können:

  • Angeben des Programms, das auf dem Server aufgerufen werden soll und Bereitstellen einer Möglichkeit, vom Client aus darauf zu verweisen. (Dieser Verweis wird auch Proxy genannt. Er stellt das Remote-Serverprogramm dar. Die Clientanwendung "ruft" den Proxy wie ein lokales Programm auf, es wird aber das Remote-Serverprogramm aufgerufen.)

  • Aufrufen des Serverprogramms. Übergeben der Parameter an das Serverprogramm, die die Datenquelle und den auszugebenden Befehl erkennen. (Das Serverprogramm verwendet ADO, um auf die Datenquelle zuzugreifen. ADO baut mit einem der vorgegebenen Parameter eine Verbindung auf und gibt dann den im anderen Parameter angegebenen Befehl aus.)

  • Das Serverprogramm erhält ein Recordset-Objekt von der Datenquelle. Optional wird das Recordset-Objekt auf dem Server verarbeitet.

  • Das Serverprogramm gibt das erstellte Recordset-Objekt an die Clientanwendung zurück.

  • Auf dem Client wird das Recordset-Objekt in ein Format umgewandelt, das von grafischen Steuerelementen auf einfache Art verwendet werden kann.

  • Veränderungen an dem Recordset-Objekt werden an das Serverprogramm zurückgeschickt, das damit die Datenquelle aktualisiert.

Dieses Programmiermodell enthält bestimmte leicht handhabbare Features. Wenn Sie kein komplexes Serverprogramm für den Zugriff auf die Datenquelle verwenden und die erforderliche Verbindung und die Befehlsparameter zur Verfügung stellen, ruft RDS automatisch die angegebenen Daten mit einem einfachen, standardmäßigen Serverprogramm ab.

Wenn Sie jedoch eine komplexere Verarbeitung benötigen, können Sie Ihr eigenes benutzerdefiniertes Serverprogramm angeben. Da ein benutzerdefiniertes Serverprogramm alle Funktionen von ADO verwenden kann, kann es z. B. zu mehreren verschiedenen Datenquellen verbinden, ihre Daten in komplexer Form zusammenfassen und ein einfaches, verarbeitetes Ergebnis an die Clientanwendung zurückgeben.

Liegt Ihr Bedarf zwischen diesen beiden Möglichkeiten, können Sie mit ADO jetzt auch das Verhalten des Standardserverprogramms anpassen.

Weiter Das RDS-Programmiermodell im Detail


Das RDS-Programmiermodell im Detail

Die folgenden Elemente sind Hauptbestandteile des RDS-Programmiermodells:

  • RDS.DataSpace

  • RDSServer.DataFactory

  • RDS.DataControl

  • Ereignis

RDS.DataSpace

Die Clientanwendung muss den Server und das Serverprogramm angeben, das aufgerufen werden soll. Die Anwendung erhält daraufhin einen Verweis auf das Serverprogramm und behandelt den Verweis wie das Serverprogramm.

Das RDS-Objektmodell setzt diese Funktionalität mit dem RDS.DataSpace-Objekt.

Das Serverprogramm wird mit einem Programmkennzeichner bzw. einer ProgID angegeben. Der Server verwendet die ProgrammID und die Registratur des Servercomputers, um nach dem zu startenden Programm zu suchen.

RDS unterscheidet intern, ob sich das Serverprogramm auf einem Remote-Server im Internet oder einem Intranet befindet, auf einem Server in einem LAN oder auf keinem Server, sondern in einer lokalen Dynamic-Link Library (DLL). Durch diese Unterscheidung wird festgelegt, wie Daten zwischen Client und Server ausgetauscht werden, und es wird ein klarer Unterschied bei der Art des Verweises gemacht, der an die Clientanwendung zurückgegeben wird. Für Sie hat diese Unterscheidung jedoch keine große Bedeutung. Wichtig ist nur, dass Sie einen brauchbaren Programmverweis erhalten.

RDSServer.DataFactory

RDS stellt ein Standardserverprogramm zur Verfügung, das entweder eine SQL-Abfrage für die Datenquelle durchführen und ein Recordset-Objekt zurückgeben kann oder ein Recordset-Objekt nimmt und die Datenquelle aktualisiert.

Das RDS-Objektmodell setzt diese Funktionalität mit dem RDSServer.DataFactory-Objekt um.

Darüber hinaus hat das Objekt eine Methode zur Erstellung eines leeren Recordset-Objekts, das Sie programmgesteuert füllen können, und es verfügt über eine weitere Methode zum Konvertieren eines Recordset-Objekts in eine Textzeichenfolge zum Erstellen einer Webseite.

Mit ADO können Sie Teile der Standardverbindung und des Befehlsverhaltens von RDSServer.DataFactory mit einer DataFactory-Behandlungsroutine und einer Anpassungsdatei überschreiben, die Verbindungs-, Befehls- und Sicherheitsparameter enthält.

Das Serverprogramm wird auch als Geschäftsobjekt bezeichnet. Sie können Ihr eigenes benutzerdefiniertes Geschäftsobjekt schreiben, das komplizierte Datenzugriffsoperationen, Gültigkeitsüberprüfungen und anderes mehr durchführen kann. Auch wenn Sie ein benutzerdefiniertes Geschäftsobjekt schreiben, können Sie die Instanz eines RDSServer.DataFactory-Objekts erstellen und einige seiner Methoden für Ihre eigenen Aufgaben verwenden.

RDS.DataControl

RDS stellt ein Mittel zur Verfügung, mit dem die Funktionalität von RDS.DataSpace und RDSServer.DataFactory kombiniert werden kann, und mit dem auch grafische Steuerelemente ermöglicht werden, mit denen ein durch eine Abfrage einer Datenquelle zurückgegebenes Recordset-Objekt einfach zu verwenden ist. Das Ziel von RDS liegt in der Regel darin, automatisch auf die Daten eines Servers zuzugreifen und diese in grafischen Steuerelementen anzuzeigen.

Das RDS-Objektmodell setzt diese Funktionalität mit dem RDS.DataControl-Objekt um.

RDS.DataControl hat zwei Aspekte. Ein Aspekt bezieht sich auf die Datenquelle. Wenn Sie die Verbindungs- und Befehlseigenschaften von RDS.DataControl setzen, wird automatisch RDS.DataSpace zum Erstellen eines Verweises auf das standardmäßige RDSServer.DataFactory-Objekt verwendet. Dann verwendet RDSServer.DataFactory den Wert der Verbindungseigenschaft für den Aufbau einer Verbindung zur Datenquelle und den Wert der Befehlseigenschaft, um ein Recordset-Objekt von der Datenquelle zu erhalten, und gibt schließlich das Recordset-Objekt an RDS.DataControl zurück.

Der zweite Aspekt bezieht sich auf die Anzeige der zurückgegebenen Daten des Recordset-Objekts in einem grafischen Steuerelement. Sie können das grafische Steuerelement mit RDS.DataControl verbinden (in einem Prozess mit dem Namen Bindung) und auf die Daten in dem verbundenen Recordset-Objekt zugreifen, wobei Abfrageergebnisse auf einer Webseite in Internet Explorer angezeigt werden. Jedes RDS.DataControl-Objekt bindet ein Recordset-Objekt, das die Ergebnisse einer einzelnen Abfrage darstellt, an ein oder mehrere grafische Steuerelemente (z. B. an ein Textfeld, Kombinationsfeld, Tabellen-Steuerelement usw.). Auf einer Seite können sich mehrere RDS.DataControl-Objekte befinden. Jedes RDS.DataControl-Objekt kann mit einer unterschiedlichen Datenquelle verbunden sein und die Ergebnisse einer anderen Abfrage enthalten.

Das RDS.DataControl-Objekt verfügt auch über eigene Methoden zum Bewegen durch die, Sortieren und Filtern der mit einem Recordset-Objekt verbundenen Zeilen. Diese Methoden sind ähnlich, jedoch nicht identisch mit den Methoden eines ADO Recordset-Objekts.

Ereignisse

RDS unterstützt zwei eigene Ereignisse, die unabhängig vom ADO-Ereignismodell sind. Das onReadyStateChange-Ereignis wird immer dann aufgerufen, wenn sich die ReadyState-Eigenschaft von RDS.DataControl verändert, wodurch Sie benachrichtigt werden, wenn eine asynchrone Operation abgeschlossen, beendet oder fehlerhaft ist. Das onError-Ereignis wird bei jedem auftretenden Fehler aufgerufen, auch wenn der Fehler während einer asynchronen Operation auftritt.

Anmerkung Die Umgebung des Microsoft Internet Explorer stellt zwei zusätzliche Ereignisse für RDS zur Verfügung: onDataSetChanged (das Recordset-Objekt ist funktionsfähig, ruft aber noch Zeilen ab) und onDataSetComplete (das Recordset-Objekt hat das Abrufen von Zeilen abgeschlossen).

Weiter Das RDS-Programmiermodell mit Objekten


Das RDS-Programmiermodell mit Objekten

Das Ziel von RDS liegt darin, über einen Vermittler wie Internet Information Server auf Datenquellen zuzugreifen und diese zu aktualisieren. Das Programmiermodell gibt die Folge von Aktivitäten an, die zum Erreichen dieses Ziels erforderlich ist. Das Objektmodell gibt die Objekte an, deren Methoden und Eigenschaften das Programmiermodell beeinflussen.

RDS stellt die Mittel für die Durchführung folgender Aktivitäten zur Verfügung:

  • Angeben des Programms, das auf dem Server aufgerufen werden soll, und Bereitstellen einer Möglichkeit (eines Proxys), um vom Client aus darauf verweisen zu können. (RDS.DataSpace)

  • Aufrufen des Serverprogramms. Übergeben der Parameter an das Serverprogramm, das die Datenquelle und den auszugebenden Befehl angibt. (Proxy oder RDS.DataControl)

  • Das Serverprogramm erhält ein Recordset-Objekt von der Datenquelle; dies geschieht in der Regel über ADO. Optional wird das Recordset-Objekt auf dem Server verarbeitet. (RDSServer.DataFactory)

  • Das Serverprogramm gibt das erstellte Recordset-Objekt an die Clientanwendung zurück. (Proxy)

  • Auf dem Client wird das Recordset-Objekt in ein Format umgewandelt, das von grafischen Steuerelementen auf einfache Art verwendet werden kann. (grafisches Steuerelement und RDS.DataControl)

  • Veränderungen an dem Recordset-Objekt werden an das Serverprogramm zurückgeschickt, das damit die Datenquelle aktualisiert. (RDS.DataControl oder RDSServer.DataFactory)

Weiter Das RDS-Objektmodell – Zusammenfassung


Das RDS-Objektmodell - Zusammenfassung

Das RDS-Objektmodell – Zusammenfassung

Objekt | Beschreibung
RDS.DataSpace | Dieses Objekt enthält nur eine Methode, um einen Serverproxy zu erhalten. Der Proxy kann das standardmäßige oder ein benutzerdefiniertes Serverprogramm (Geschäftsobjekt) sein. Das Serverprogramm kann im Internet, einem Intranet oder LAN aufgerufen werden, oder es kann eine lokale DLL sein.
RDSServer.DataFactory | Dieses Objekt stellt das Standardserverprogramm dar. Es führt den standardmäßigen RDS-Datenabruf und die Aktualisierung aus.
RDS.DataControl
  • Dieses Objekt kann automatisch die Objekte RDS.DataSpace und RDSServer.DataFactory aufrufen.

  • Verwenden Sie dieses Objekt, um den standardmäßigen RDS-Datenabruf und die Aktualisierung aufzurufen.

  • Dieses Objekt stellt auch die Mittel zur Verfügung, um mit grafischen Steuerelementen auf das zurückgegebene Recordset-Objekt zuzugreifen.


ADO-Features

Die folgenden Themen beschreiben diverse Features von ADO und RDS.

  • Schnellverfahren für das Erstellen eines Recordset-Objekts

  • Beständigkeit von Recordsets

  • Indexunterstützung und die Find-Methode sowie die Eigenschaften Sort und Filter

  • ADO für Windows Foundation Classes

  • ADO-Ereignismodell und asynchrone Operationen

  • VC++-Erweiterungen für ADO

  • Datenstrukturierung

  • DataFactory-Anpassung


Schnellverfahren für das Erstellen eines Recordset-Objekts

ADO stellt ein Schnellverfahren für das Erstellen eines Recordset-Objekts zur Verfügung, indem neue Field-Objekte an die Field-Auflistung eines Recordset-Objekts angehängt werden. Später können Sie dann das Recordset-Objekt öffnen und Daten aus einer beliebigen Quelle einfügen, wobei es sich bei der Datenquelle nicht unbedingt um eine Datenbank handeln muss. Sie können die Daten aber auch programmgesteuert erstellen.

Das neue Recordset-Objekt kann alle Datenverarbeitungsmethoden verwenden, die einem normalen Recordset-Objekt zur Verfügung stehen. Verwenden Sie das Recordset-Objekt, um Informationen an ein grafisches Steuerelement zu liefern, oder sogar, um eine tatsächliche Datenquelle zu aktualisieren.


Beständigkeit von Recordsets

Mit der Beständigkeit von Recordsets können Sie Daten und Metadaten aus Recordset-Objekten als Datei speichern. Später können Sie die gespeicherte Datei verwenden, um das Recordset-Objekt wiederherzustellen. Die gespeicherte Datei kann sich auf einem lokalen Laufwerk, einem Netzwerkserver oder als URL auf einer Website befinden.

Darüber hinaus konvertiert die GetString-Methode ein Recordset-Objekt in ein Formular, in dem die Spalten und Zeilen mit den von Ihnen angegebenen Zeichen getrennt werden.

Details

Der Microsoft OLE DB Persististence-Provider unterstützt das Speichern eines Recordset-Objekts in einer Datei mit Hilfe der Save-Methode des Recordset-Objekts. Später kann die gespeicherte Datei mit Hilfe der Open-Methode des Recordset-Objekts oder der Execute-Methode des Connection-Objekts wiederhergestellt werden.

Das Recordset-Objekt wird in ein Formular umgewandelt, das in einer Datei gespeichert werden kann. Recordset-Objekte können entweder im proprietären Format Advanced Data TableGram (ADTG) oder im offenen Format Extensible Markup Language (XML) gespeichert werden.

Anstehende Änderungen werden in der bestehenden Datei gespeichert. Deshalb können Sie eine Abfrage ausgeben, die ein Recordset-Objekt zurückgibt, das Recordset bearbeitet, es zusammen mit den anstehenden Änderungen speichert, das Recordset später wiederherstellt und die Datenquelle dann mit den gespeicherten anstehenden Änderungen aktualisiert.

Verwendung

Speichern eines Recordsets:

Dim rs as New ADODB.Recordset
rs.Save "c:\yourFile.adtg", adPersistADTG

Öffnen einer gespeicherten Datei mit Recordset.Open:

dim rs as New ADODB.Recordset
rs.Open "c:\yourFile.adtg", "Provider=MSPersist",,,adCmdFile

Falls das Recordset keine aktive Verbindung hat, können Sie auch alle Standardwerte übernehmen und einfach den folgenden Code verwenden:

dim rs as New ADODB.Recordset
rs.Open "c:\yourFile.adtg"

Öffnen einer gespeicherten Datei mit Connection.Execute:

dim conn as New ADODB.Connection
dim rs as New ADODB.Recordset
conn.Open "Provider=MSPersist"
set rs = conn.execute("c:\yourFile.adtg")

Öffnen einer gespeicherten Datei mit RDS.DataControl:

In diesem Fall wird die Server-Eigenschaft nicht gesetzt.

Dim dc as New RDS.DataControl
dc.Connection = "Provider=MSPersist"
dc.SQL = "c:\yourFile.adtg"
dc.Refresh


Indexunterstützung und die Find-Methode sowie die Eigenschaften Sort und Filter

Durch Indizes bei Feldern kann die Leistung der Find-Methode und der Eigenschaften Sort und Filter des Recordset-Objekts sehr verbessert werden. Sie können einen internen Index für ein Field-Objekt erstellen, indem Sie dafür die dynamische Optimize-Eigenschaft festlegen. Diese dynamische Eigenschaft wird zur Properties-Auflistung des Field-Objekts hinzugefügt, wenn Sie die CursorLocation-Eigenschaft auf adUseClient setzen. Beachten Sie, dass dieser Index in ADO intern ist, d. h., Sie können nicht darauf zugreifen oder ihn für einen anderen Zweck verwenden.

Durch die Sort-Eigenschaft wird die Reihenfolge festgelegt, in der die Zeilen eines Recordset-Objekts durchlaufen werden, mit der Filter-Eigenschaft wird festgelegt, auf welche Zeilen beim Durchlaufen zugegriffen werden kann, und durch die Find-Methode kann ein Wert innerhalb einer indizierten Spalte (eines Feldes) eines Recordset-Objekts schnell gefunden werden.


ADO für Windows Foundation Classes

Es ist möglich, auf Daten zuzugreifen, indem die ADO-Anwendungsprogrammierschnittstelle mit Microsoft® Visual J++™ (der Programmiersprache Java) verwendet wird.

ADO für Windows Foundation Classes (ADO/WFC) unterstützt alle standardmäßigen ADO-Methoden, -Eigenschaften, -Objekte und -Ereignisse. Operationen, für die ein VARIANT als Parameter erforderlich ist und die in einer Sprache wie Microsoft® Visual Basic® eine besonders gute Leistung aufweisen, zeigen in einer Sprache wie Visual J++ jedoch eine schwächere Leistung. Aus diesem Grund stellt ADO/WFC auch Zugriffsfunktionen auf das Field-Objekt zur Verfügung, die systemeigene Java-Datentypen anstelle von VARIANT-Datentypen verwenden.


ADO-Ereignismodell und asynchrone Operationen

Das ADO-Ereignismodell unterstützt bestimmte synchrone und asynchrone ADO-Operationen, die Ereignisse oder Benachrichtigungen ausgeben, bevor die Operation beginnt oder nachdem sie abgeschlossen wurde. Ein Ereignis ist der Aufruf einer Ereignisbehandlungsroutine, die Sie in der Anwendung definieren.

Mit Ereignisbehandlungsroutinen, die vor dem Beginn einer Operation aufgerufen werden, können Sie Operationsparameter überprüfen und verändern, anschließend können Sie die Operation dann abbrechen oder vollständig ausführen.

Ereignisbehandlungsroutinen, die nach Beendigung einer Operation aufgerufen werden, sind besonders wichtig, da ADO jetzt auch asynchrone Operationen unterstützt. Eine Anwendung, die eine asynchrone Recordset.Open-Operation startet, wird z. B. durch ein Ereignis zur Beendigung der Ausführung erkannt, wenn die Operation beendet ist.

Weitere Informationen zu Ereignissen finden Sie unter den folgenden Themen:

  • ADO-Ereignisbehandlungsroutinen - Zusammenfassung

  • Arten von Ereignissen

  • Ereignisparameter

  • So arbeiten Ereignisbehandlungsroutinen zusammen

  • ADO-Ereignisse in ADO/WFC

  • ADO-Ereignis-Instantiierung nach Sprachen


ADO-Ereignisbehandlungsroutinen - Zusammenfassung

Es gibt zwei Gruppen von Ereignissen. Die ConnectionEvent-Gruppe gehört zu Operationen des Connection-Objekts und die RecordsetEvent-Gruppe gehört zu Operationen des Recordset-Objekts.

  • ConnectionEvents - Ereignisse werden ausgelöst, wenn eine Transaktion auf einer Verbindung beginnt, ausgeführt oder zurückgesetzt wird, wenn ein Befehl ausgeführt wird und wenn eine Verbindung beginnt oder endet.

  • RecordsetEvents - Ereignisse werden ausgelöst, wenn Sie sich durch die Zeilen eines Recordset-Objekts bewegen, ein Feld in einer Zeile eines Recordset-Objekts verändern, eine Zeile in einem Recordset-Objekt verändern oder irgendeine Veränderung im Recordset-Objekt vornehmen.

ADO-Ereignisbehandlungsroutinen - Zusammenfassung

ConnectionEvent | Beschreibung
BeginTransComplete, CommitTransComplete, RollbackTransComplete | Transaktionsmanagement - Benachrichtigung, dass die aktuelle Transaktion auf der Verbindung gestartet, ausgeführt oder zurückgesetzt wurde.
WillConnect, ConnectComplete, Disconnect | Verbindungsmanagement – Benachrichtigung, dass die aktuelle Verbindung starten wird oder gestartet oder beendet wurde.
WillExecute, ExecuteComplete | Befehlsausführungsmanagement - Benachrichtigung, dass die Ausführung des aktuellen Befehls auf der Verbindung starten wird oder beendet wurde.
InfoMessage | Information - Benachrichtung über zusätzliche Informationen zur aktuellen Operation.

RecordsetEvent | Beschreibung
FetchProgress, FetchComplete | Abfragestatus - Benachrichtigung über den Fortschritt der Datenabrufoperation oder die Beendigung der Abrufoperation.
WillChangeField, FieldChangeComplete | Feldänderungsmanagement - Benachrichtigung, dass sich der Wert des aktuellen Feldes ändert oder geändert hat.
WillMove, MoveComplete , EndOfRecordset | Navigationsmanagement - Benachrichtigung, dass sich die aktuelle Zeilenposition in einem Recordset-Objekt ändert, geändert hat oder das Ende des Recordset-Objekts erreicht wurde.
WillChangeRecord, RecordChangeComplete | Zeilenänderungsmanagement - Benachrichtigung, dass sich Daten in der aktuellen Zeile eines Recordset-Objekts ändern oder geändert haben.
WillChangeRecordset, RecordsetChangeComplete | Recordset-Änderungsmanagement - Benachrichtigung, dass sich Daten im aktuellen Recordset-Objekt ändern oder geändert haben.


Arten von Ereignissen

Will-Ereignisse

Mit Ereignisbehandlungsroutinen, die vor dem Beginn einer Operation aufgerufen werden, können Sie Operationsparameter überprüfen und verändern, dann können Sie die Operation entweder abbrechen oder ausführen lassen. Diese Ereignisbehandlungsroutinen haben in der Regel Namen der Form WillEreignis (Will-Ereignisse).

Complete-Ereignisse

Durch Ereignisbehandlungsroutinen, die nach Beendigung einer Operation aufgerufen werden, kann die Anwendung benachrichtigt werden, dass eine Operation abgeschlossen worden ist. Eine solche Ereignisbehandlungsroutine wird auch aufgerufen, wenn eine ausstehende Operation durch eine Will-Ereignisbehandlungsroutine abgebrochen wird. Diese Ereignisbehandlungsroutinen haben in der Regel Namen der Form EreignisComplete (Complete-Ereignisse).

Will- und Complete-Ereignisse werden in der Regel als Paar verwendet.

Die anderen Ereignisse

Die anderen Ereignisbehandlungsroutinen - d. h. Ereignisse, deren Namen nicht die Form WillEreignis oder EreignisComplete - aufweisen, werden nur nach Beendigung einer Operation aufgerufen.


Ereignisparameter

Jede Ereignisbehandlungsroutine hat einen Statusparameter, der die Ereignisbehandlungsroutine steuert. Die meisten Complete-Ereignisse haben einen Fehlerparameter, um zu berichten, ob die Operation, die das Ereignis aufgerufen hat, erfolgreich war, und einen Objektparameter, um das ADO-Objekt anzugeben, auf das die Operation angewendet wird.

Die Parameter, die in der ausstehenden Operation verwendet werden sollen, werden auch an die Will-Ereignisse übergeben. Auf diese Weise können Sie die Parameter überprüfen und angeben, ob die Operation beendet oder abgebrochen werden soll.

Einige Ereignisbehandlungsroutinen haben einen Begründungsparameter, der zusätzliche Informationen über den Grund für ein Ereignis liefert.

Statusparameter

Wenn die Ereignisbehandlungsroutine aufgerufen wird, wird der Statusparameter auf einen der folgenden Informationswerte gesetzt.

Wert | Beschreibung
adStatusOK | Die Operation, die das Ereignis verursacht hat, war erfolgreich.
adStatusErrorsOccurred | Die Operation, die das Ereignis verursacht hat, war nicht erfolgreich, oder ein Will-Ereignis hat die Operation abgebrochen. Weitere Informationen finden Sie im Fehlerparameter.
adStatusCantDeny | Ein Will-Ereignis kann eine bevorstehende Operation nicht abbrechen.

Lassen Sie den Statusparameter unverändert, oder setzen Sie ihn auf einen der folgenden Anforderungswerte, bevor die Ereignisbehandlungsroutine zurückgegeben wird.

Wert | Beschreibung
adStatusUnwantedEvent | Anforderung, dass diese Ereignisbehandlungsroutine keine weiteren Benachrichtigungen erhält.
adStatusCancel | Anforderung, dass die bevorstehende Operation abgebrochen wird.

Abhängig vom Ereignistyp kann der Statusparameter beim Aufruf der Ereignisbehandlungsroutine einen der folgenden Werte haben.

Ereignistyp | Wert
Will | adStatusOK, adStatusCantDeny
Complete | adStatusOK, adStatusErrorsOccurred

Abhängig vom Ereignistyp kann der Statusparameter bei der Rückgabe der Ereignisbehandlungsroutine einen der folgenden Werte haben.

Ereignistyp | Wert
Will | adStatusOK, adStatusCancel, adStatusUnwantedEvent
Complete | adStatusOK, adStatusUnwantedEvent

Fehlerparameter

Der Fehlerparameter verweist auf ein ADO Error-Objekt, das Einzelheiten darüber enthält, warum die Operation fehlgeschlagen ist, wenn der Statusparameter adStatusErrorsOccurred ist.

Objektparameter

Der Objektparameter verweist auf ein ADO-Objekt, auf das die Operation angewendet wird. Sie können z. B. mehrere Connection-Objekte und nur eine Disconnect-Ereignisbehandlungsroutine gleichzeitig geöffnet haben. Wird eine Verbindung beendet, wird die Disconnect-Ereignisbehandlungsroutine aufgerufen, wobei der Objektparameter auf das Connection-Objekt gesetzt ist, das geschlossen worden ist.

Begründungsparameter

Der Begründungsparameter, adReason, liefert zusätzliche Informationen über den Grund des Ereignisses. Methoden mit einem adReason-Parameter können sogar für dieselbe Operation mehrmals aufgerufen werden, sofern jedes Mal ein anderer Grund vorliegt.

Die WillChangeRecord-Ereignisbehandlungsroutine wird z. B. für Operationen aufgerufen, die im Begriff sind, einen Datensatz einzufügen, zu löschen oder zu ändern oder den betreffenden Vorgang rückgängig zu machen. Verwenden Sie den Parameter adReason als Filter, damit nur bestimmte Ereignisse verarbeitet werden.

Sie müssen adStatusUnwantedEvent im adStatus-Parameter zurückgeben, um anzufordern, dass eine Ereignisbehandlungsroutine ohne adReason-Parameter aufhört, Ereignisbenachrichtigungen zu empfangen. Eine Ereignisbehandlungsroutine mit adReason-Parameter kann jedoch mehrere Benachrichtigungen aus jeweils unterschiedlichen Gründen empfangen. Deshalb müssen Sie adStatusUnwantedEvent für jede Benachrichtigung zurückgeben, die durch einen anderen Grund verursacht wurde.

Beispiel: Sie haben eine WillChangeRecord-Ereignisbehandlungsroutine in Microsoft® Visual Basic® kodiert. Wenn Sie keinerlei weitere Benachrichtigungen empfangen möchten, fügen Sie lediglich den folgenden Code ein:

Set adStatus = adStatusUnwantedEvent

Wenn Sie jedoch Ereignisse verarbeiten möchten, bei denen das Löschen einer Zeile bevorsteht, aber Benachrichtigungen aus anderen Gründen verwerfen wollen, verwenden Sie den folgenden Code:

if (adReason = adRsnDelete)
' Ein Ereignis mit diesem Grund verarbeiten.
...
else
' Empfangen von Ereignissen mit anderen Gründen stoppen.
Set adStatus = adStatusUnwantedEvent
...


So arbeiten Ereignisbehandlungs-routinen zusammen

Alle Ereignisbehandlungsroutinen der ConnectionEvent- und RecordsetEvent-Gruppe müssen implementiert werden, auch wenn keine Ereignisse verwendet werden. Der Aufwand bei der Implementierung hängt von der verwendeten Programmiersprache ab. Bei einigen Sprachen wie Microsoft Visual Basic wird diese Arbeit für Sie erledigt. Bei anderen Sprachen wie Microsoft® Visual C++® müssen Sie diese Arbeit selbst ausführen. Microsoft® Visual J++™ mit ADO/WFC liegt in der Mitte und erledigt einen großen Teil der Arbeit für Sie. Weitere Informationen finden Sie unter ADO-Ereignis-Instantiierung nach Sprachen.

Auch wenn es mehr Arbeit bedeutet, die Ereignisbehandlungsroutinen selbst zu implementieren, haben Sie dadurch Möglichkeiten, die in anderen Sprachen wie Visual Basic nicht bestehen. Bei Microsoft Visual C++ kann eine RecordsetEvent-Behandlungsroutine z. B. Benachrichtigungen von Operationen auf mehreren Recordset-Objekten verarbeiten.

Will- und Complete-Ereignisbehandlungsroutinen können paarweise oder einzeln verwendet werden.

Gepaarte Ereignisbehandlungsroutinen

  • Das folgende Szenario schildert, was geschieht, wenn ein Will-Ereignis Erfolg hat.

    Ein Recordset-Objekt hat paarweise auftretende WillChangeField- und FieldChangeComplete-Ereignisse. Sie ändern in der Anwendung den Wert eines Feldes. Die WillChangeField-Ereignisbehandlungsroutine wird aufgerufen. Sie geben eine Anzeige zurück, dass das Feld geändert werden kann. Die Operation wird abgeschlossen und ein FieldChangeComplete-Ereignis informiert die Anwendung, dass die Operation beendet ist. Der Statusparameter der Ereignisbehandlungsroutine berichtet den erfolgreichen Abschluss der Operation.

  • Das folgende Szenario schildert, was geschieht, wenn ein Will-Ereignis eine Operation abbricht.

    In derselben Anwendung ändern Sie ein weiteres Feld. Die WillChangeField-Ereignisbehandlungsroutine wird aufgerufen. Sie entscheiden aus einem bestimmten Grund, dass Sie die Änderung des Feldes nicht annehmen und geben adStatusCancel im Statusparameter zurück. Die Operation wird daher nicht beendet.

    Durch das FieldChangeComplete-Ereignis werden Sie benachrichtigt, dass die Operation beendet ist. Der Statusparameter der Ereignisbehandlungsroutine ist auf adStatusErrorsOccurred gesetzt, der Fehlerparameter verweist auf ein Error-Objekt, und die Number-Eigenschaft des Error-Objekts wird entweder auf einen ADO-Wert oder einen Provider-Wert gesetzt, der angibt, dass die Operation abgebrochen wurde.

  • Für dieselbe Operation können mehrere Will- und Complete-Ereignisbehandlungsroutinen aufgerufen werden. Das folgende Szenario schildert, was geschieht, wenn mehrere Will-Ereignisse Erfolg haben.

    Ein Recordset-Objekt hat paarweise auftretende WillChangeField-, FieldChangeComplete-, WillChangeRecord- und RecordChangeComplete-Ereignisse. Sie verändern den Wert eines Feldes, die WillChangeField-Ereignisbehandlungsroutine wird aufgerufen und Sie geben eine Anzeige zurück, dass das Feld geändert werden kann.

    Als Nächstes wird die WillChangeRecord-Ereignisbehandlungsroutine aufgerufen und Sie geben erneut an, dass die Operation beendet werden kann.

    Anmerkung Im Allgemeinen werden alle Will-Ereignisbehandlungsroutinen aufgerufen, die zu einer bestimmten Instanz eines ADO-Objekts gehören. Sie werden jedoch nicht in einer bestimmten Reihenfolge aufgerufen.

    Beim Beenden der Operation werden die FieldChangeComplete- und RecordChangeComplete-Ereignisbehandlungsroutinen aufgerufen.

  • Für dieselbe Operation können mehrere Will- und Complete-Ereignisbehandlungsroutinen aufgerufen werden, durch eine davon kann die ausstehende Operation jedoch abgebrochen werden. Das folgende Szenario schildert, was geschieht, wenn das letzte von mehreren Will-Ereignissen eine Operation abbricht.

    Auch hier hat ein Recordset-Objekt paarweise auftretende WillChangeField-, FieldChangeComplete-, WillChangeRecord- und RecordChangeComplete-Ereignisse. Sie verändern den Wert eines Feldes, die WillChangeField-Ereignisbehandlungsroutine wird aufgerufen und Sie geben eine Anzeige zurück, dass das Feld geändert werden kann.

    Als Nächstes wird die WillChangeRecord-Ereignisbehandlungsroutine aufgerufen. Vielleicht geben Sie an, dass die Feldänderung an sich akzeptiert wird, aber es tritt ein Fehler im gesamten Datensatz auf. Sie geben adStatusCancel zurück, um anzugeben, dass die Änderung in dem Feld nicht akzeptiert wird. Die WillChangeField-Ereignisbehandlungsroutine hat die Operation bereits erlaubt.

    Die Operation wird nicht beendet, da sie durch die WillChangeRecord-Ereignisbehandlungsroutine abgebrochen wurde. Die FieldChangeComplete-Ereignisbehandlungsroutine wird aufgerufen und der Statusparameter ist auf adStatusErrorsOccurred gesetzt; der Fehlerparameter ist entsprechend gesetzt.

    Danach wird die RecordChangeComplete-Ereignisbehandlungsroutine ebenfalls aufgerufen, der Statusparameter ist auf adStatusErrorsOccurred gesetzt. Das entsprechende Complete-Ereignis wird für das Will-Ereignis aufgerufen.

  • Für dieselbe Operation können mehrere Will- und Complete-Ereignisbehandlungsroutinen aufgerufen werden, durch eine davon kann die ausstehende Operation jedoch abgebrochen werden. Das folgende Szenario schildert, was geschieht, wenn die Operation durch eine andere Ereignisbehandlungsroutine als die letzte von mehreren Will-Ereignissen abgebrochen wird.

    Auch hier hat ein Recordset-Objekt paarweise auftretende WillChangeField-, FieldChangeComplete-, WillChangeRecord- und RecordChangeComplete-Ereignisse. Sie verändern den Wert eines Feldes, die WillChangeField-Ereignisbehandlungsroutine wird aufgerufen, und Sie geben adStatusCancel zurück, um anzuzeigen, dass die Änderung des Feldes nicht angenommen wird. Die Operation wird nicht beendet, das FieldChangeComplete-Ereignis gibt an, das die Operation beendet ist, die Status- und Fehlerparameter sind entsprechend gesetzt.

    Die Ereignisbehandlungsroutine WillChangeRecord (und damit RecordChangeComplete) wird jedoch nicht aufgerufen, da die Operation durch das erste Will-Ereignis abgebrochen worden ist. Im Allgemeinen gilt, dass keine ausstehende Will-Ereignisbehandlungsroutine aufgerufen wird, wenn eine Operation durch ein Will-Ereignis abgebrochen wurde.

Ungepaarte Ereignisbehandlungsroutinen

Sie können die Ereignisbenachrichtigungen für jedes Ereignis ausschalten, indem Sie im Statusparameter adStatusUnwantedEvent zurückgeben. Wird z. B. die erste Complete-Ereignisbehandlungsroutine aufgerufen, können Sie adStatusUnwantedEvent zurückgeben und erhalten dann nur Will-Ereignisse.

Einzelne Will-Ereignisbehandlungsroutinen können nützlich sein, wenn Sie die Parameter überprüfen möchten, die in der Operation verwendet werden. Sie können diese Operationsparameter verändern oder die Operation abbrechen.

Alternativ können Sie die Complete-Ereignisbenachrichtigung aktiviert lassen, und beim Aufruf der ersten Will-Ereignisbehandlungsroutine adStatusUnwantedEvent zurückgeben. Sie erhalten dann nur Complete-Ereignisse.

Einzelne Complete-Ereignisbehandlungsroutinen können beim Verwalten asynchroner Operationen nützlich sein. Jede asynchrone Operation hat ein entsprechendes Complete-Ereignis.

Es kann z. B. sehr lange dauern, ein sehr großes Recordset-Objekt zu füllen. Wenn die Anwendung richtig geschrieben ist, können Sie eine Recordset.Open(...,adAsyncExecute)-Operation beginnen und mit anderen Verarbeitungsschritten fortfahren. Sie werden schließlich durch ein ExecuteComplete-Ereignis benachrichtigt, wenn das Recordset-Objekt gefüllt ist.

Einzelne Ereignisbehandlungsroutinen und mehrere Objekte

Durch die Flexibilität einer Programmiersprache wie Microsoft Visual C++ kann eine Ereignisbehandlungsroutine die Ereignisse mehrerer Objekte verarbeiten. Eine Disconnect-Ereignisbehandlungsroutine kann z. B. die Ereignisse verschiedener Connection-Objekte verarbeiten. Wird eine der Verbindungen beendet, wird die Disconnect-Ereignisbehandlungsroutine aufgerufen. Sie können sagen, welche Verbindung das Ereignis ausgelöst hat, da der object-Parameter der Ereignisbehandlungsroutine auf das entsprechende Connection-Objekt gesetzt ist.

Anmerkung Diese Technik kann in Visual Basic nicht verwendet werden, da bei dieser Sprache nur ein Objekt pro Ereignis verarbeitet werden kann.

Mehrere Ereignisbehandlungsroutinen und einzelne Operationen

Es ist möglich, wenn auch wenig nützlich, ein ADO-Objekt und seine Operationen mit mehreren Gruppen von Ereignissen zu verbinden. Sie können z. B. mehrere WillChangeField-Ereignisse erstellen, die jeweils eine bestimmte Feldüberprüfungsbearbeitung durchführen. Wenn ein Feld geändert werden soll, kann ein Will-Ereignis einen Aspekt des Feldwerts überprüfen, danach kann ein anderes Will-Ereignis einen anderen Aspekt prüfen.

Diese Technik ist jedoch wenig nützlich, da Sie alle Bearbeitungen auch einfach über eine einzelne Ereignisbehandlungsroutine durchführen oder aufrufen können. Sie ist aber aus Gründen der Vollständigkeit hier aufgeführt


ADO-Ereignisse in ADO/WFC

ADO für Windows Foundation Classes (ADO/WFC) basiert auf dem ADO-Ereignismodell und stellt eine vereinfachte Schnittstelle für die Anwendungsprogrammierung dar. Im Allgemeinen fängt ADO/WFC die ADO-Ereignisse ab, stellt die Ereignisparameter in einer einzelnen Ereignisklasse zusammen und ruft dann die Ereignisbehandlungsroutine auf.

So verwenden Sie ADO-Ereignisse in ADO/WFC

  1. Definieren Sie eine eigene Ereignisbehandlungsroutinenmethode zur Verarbeitung eines Ereignisses. Wenn Sie das ConnectComplete-Ereignis z. B. in der ConnectionEvent-Gruppe verarbeiten möchten, können Sie folgenden Code verwenden:
    public void onConnectComplete(Object sender,ConnectionEvent e)
{
    System.out.println("onConnectComplete:" + e);
}
  2. Definieren Sie ein handler-Objekt zur Darstellung der Ereignisbehandlungsroutinenmethode. Das handler-Objekt muss dem Datentyp ConnectEventHandler für ein Ereignis des Typs ConnectionEvent oder dem Datentyp RecordsetEventHandler für ein Ereignis des Typs RecordsetEvent entsprechen. Schreiben Sie z. B. folgenden Code für die ConnectComplete-Ereignisbehandlungsroutine:
        ConnectionEventHandler handler =
        new ConnectionEventHandler(this, "onConnectComplete");

    Das erste Argument des ConnectionEventHandler-Konstruktors verweist auf die Klasse, die die im zweiten Argument genannte Methode enthält.

    Der Microsoft Visual J++-Compiler unterstützt auch eine äquivalente Syntax:

        ConnectionEventHandler handler =
        new ConnectionEventHandler(this.onConnectComplete);

    Das einzelne Argument ist ein Verweis auf die gewünschte Klasse (nämlich this) und Methode innerhalb der Klasse (nämlich onConnectComplete).

  3. Fügen Sie die Ereignisbehandlungsroutine in eine Liste von Behandlungsroutinen ein, die zur Verarbeitung eines besonderen Ereignistyps gedacht ist. Verwenden Sie die Methode mit einem Namen wie addOn Ereignisname (Behandlungsroutine).

  4. JADO implementiert intern alle ADO-Ereignisbehandlungsroutinen. Daher wird ein durch eine Connection- oder Recordset-Operation verursachtes Ereignis von einer ADO/WFC-Ereignisbehandlungsroutine abgefangen.

    Die ADO/WFC-Ereignisbehandlungsroutine übergibt ADO ConnectionEvent-Parameter in eine Instanz der ADO/WFC ConnectionEvent-Klasse oder ADO RecordsetEvent-Parameter in eine Instanz der ADO/WFC RecordsetEvent-Klasse. Diese ADO/WFC-Klassen stellen diese ADO-Ereignisparameter zusammen; d. h. jede ADO/WFC-Klasse enthält ein Datenelement für jeden einzelnen Parameter in allen ADO ConnectionEvent- oder RecordsetEvent-Methoden.

  5. ADO/WFC ruft dann die Ereignisbehandlungsroutine mit dem ADO/WFC-Ereignisobjekt auf. Die onConnectComplete-Behandlungsroutine hat z. B. folgende Signatur:
        public void onConnectComplete(Object sender,ConnectionEvent e)

    Das erste Argument ist der Objekttyp, der das Ereignis (Connection oder Recordset) gesendet hat, und das zweite Argument ist das ADO/WFC-Ereignisobjekt (ConnectionEvent oder RecordsetEvent).

    Die Signatur der Ereignisbehandlungsroutine ist einfacher als ein ADO-Ereignis. Sie müssen aber das ADO-Ereignismodell verstehen, damit Sie wissen, welche Parameter auf ein Ereignis angewendet werden und wie Sie darauf antworten müssen.

  6. Kehren Sie von Ihrer Ereignisbehandlungsroutine zu der ADO/WFC-Behandlungsroutine für das ADO-Ereignis zurück. ADO/WFC kopiert die entsprechenden Datenelemente des ADO/WFC-Ereignisses zurück in die ADO-Ereignisparameter, dann wird die ADO-Ereignisbehandlungsroutine zurückgegeben.

  7. Wenn die Verarbeitung abgeschlossen ist, entfernen Sie die Behandlungsroutine aus der Liste der ADO/WFC-Ereignisbehandlungsroutinen. Verwenden Sie die Methode mit einem Namen wie removeOn Ereignisname (Behandlungsroutine).


ADO-Ereignis-Instantiierung nach Sprachen

Jede Programmiersprache erstellt die Instanzen von ADO-Ereignissen auf unterschiedliche Weise. In allen folgenden Beispielen wird eine ConnectComplete-Ereignisbehandlungsroutine erstellt.

Visual Basic

Dim WithEvent connEvent as Connection
Dim conn as New Connection
set connEvent = conn        ' Ereignisunterstützung aktivieren.
conn.Open(...)
...
set connEvent = Nothing    ' Ereignisunterstützung deaktivieren.
...
Private Sub connEvent_ConnectComplete(ByVal err as ADODB.Error, & _
adStatus as ADODB.EventStatus, ByVal pConnection as ADODB.Connection)
' Fehlerobjekt nur überprüfen, wenn adStatus gleich adStatusErrorsOccurred ist.
...
End Sub

Visual C++

Im Folgenden wird schematisch beschrieben, wie ADO-Ereignisse in VC++ instantiiert werden.

Erstellen Sie von den in der Datei adoint.h befindlichen ConnectionEventsVt- und RecordsetEventsVt-Schnittstellen abgeleitete Klassen.

class CConnEvent : public ConnectionEventsVt
{
    public:
    STDMETHODIMP InfoMessage(
            ADOError *pError,
            EventStatusEnum *adStatus,
            _ADOConnection *pConnection);
...
}

class CRstEvent : public RecordsetEventsVt
{
    public:
        STDMETHODIMP WillChangeField(
                LONG cFields,
                VARIANT Fields,
                EventStatusEnum *adStatus,
                _ADORecordset *pRecordset);
...
}

Implementieren Sie alle Ereignisbehandlungsroutinemethoden in beiden Klassen. Es reicht aus, wenn jede Methode nur S_OK als HRESULT zurückgibt. Wenn Sie jedoch bekannt geben, daß Ihre Ereignisbehandlungsroutinen verfügbar sind, werden sie standardmäßig kontinuierlich aufgerufen. Sie können auch anfordern, dass nach dem ersten Mal keine weitere Benachrichtigung erfolgt, indem Sie adStatus auf adStatusUnwantedEvent setzen.

STDMETHODIMP CConnEvent::ConnectComplete(
                ADOError *pError,
                EventStatusEnum *adStatus,
                 _ADOConnection *pConnection)
        {
        *adStatus = adStatusUnwantedEvent;
        return S_OK;
        }

Die Ereignisklassen erben Informationen von IUnknown. Deshalb müssen Sie auch die QueryInterface-, AddRef- und Release-Methoden implementieren. Implementieren Sie auch Klassenkonstruktoren und -destruktoren. Wählen Sie die VC++-Werkzeuge, mit denen Sie am liebsten arbeiten, um diesen Teil des Vorgangs zu vereinfachen.

Geben Sie bekannt, daß Ihre Ereignisbehandlungsroutinen verfügbar sind, indem Sie QueryInterface auf den Recordset- und Connection-Objekten für die Schnittstellen IConnectionPointContainer und IConnectionPoint ausführen. Führen Sie dann IConnectionPoint::Advise für jede Klasse aus.

Nehmen Sie z. B. an, Sie verwenden eine Boolesche Funktion, die True zurückgibt, wenn sie ein Recordset-Objekt erfolgreich darüber informiert, dass Sie verfügbare Ereignisbehandlungroutinen besitzen.

HRESULT    hr;
DWORD        dwEvtClass;
IConnectionPointContainer    *pCPC = NULL;
IConnectionPoint                *pCP = NULL;
CRstEvent                        *pRStEvent = NULL;
...
_RecordsetPtr     pRs();
pRs.CreateInstance(__uuidof(Recordset));
pRStEvent = New CRstEvent();
if (pRStEvent == NULL) return FALSE;
...
hr = pRs->QueryInterface(IID_IConnectionPointContainer, &pCPC);
if (FAILED(hr)) return FALSE;
hr = pCPC->FindConnectionPoint(IID_ADORecordsetEvents, &pCP);
pCPC->Release();    // Immer sofort freigeben, auch ohne Überprüfung.
if (FAILED(hr)) return FALSE;
hr = pCP->Advise(pRstEvent, &dwEvtClass);    //Ereignisunterstützung aktivieren.
pCP->Release();
if (FAILED(hr)) return FALSE;
...
return TRUE;
...

An dieser Stelle werden Ereignisse für die RecordsetEvent-Familie aktiviert und Ihre Methoden werden aufgerufen, wenn Recordset-Ereignisse auftreten.

Rufen Sie später, wenn Sie die Verfügbarkeit Ihrer Ereignisbehandlungsroutinen aufheben möchten, den Verbindungspunkt erneut ab, und führen Sie die IConnectionPoint::UnAdvise-Methode aus.

...
hr = pCP->UnAdvise(dwEvtClass);    //Ereignisunterstützung deaktivieren.
pCP->Release();
if (FAILED(hr)) return FALSE;
...

Selbstverständlich müssen Sie die passenden Schnittstellen freigeben und die richtigen Klassenobjekte zerstören.

Visual J++

import wfc.data.*;
public class MyClass
{
ConnectionEventHandler handler =
    new ConnectionEventHandler(this,"onConnectComplete");

public void onConnectComplete(Object sender,ConnectionEvent e)
{
    if (e.adStatus == AdoEnums.EventStatus.ERRORSOCCURRED)
        System.out.println("Verbindung fehlgeschlagen");
    else
        System.out.println("Verbindung abgeschlossen");
    return;
}

void main( void )
{
    Connection conn = new Connection();

    conn.addOnConnectComplete(handler);        // Ereignisunterstützung aktivieren.
    conn.open("DSN=pubs");
    conn.close();
    conn.removeOnConnectComplete(handler);    // Ereignisunterstützung deaktivieren.
}
}

VBScript

VBScript unterstützt keine Ereignisse.


VC++-Erweiterungen für ADO

Eine der aufwendigsten Arbeiten für Visual C++-Programmierer beim Abrufen von Daten mit ADO besteht darin, als VARIANT-Datentyp zurückgegebene Daten in einen C++-Datentyp zu konvertieren und anschließend die konvertierten Daten in einer Klasse oder Struktur zu speichern. Abgesehen davon, dass diese Aufgabe sehr mühsam ist, wird durch das Abrufen von C++-Daten über einen VARIANT-Datentyp auch die Leistung vermindert.

ADO stellt eine Schnittstelle zur Verfügung, die das Abrufen der Daten in systemeigene C/C++-Datentypen unterstützt, ohne dass ein VARIANT-Datentyp verwendet werden muss; außerdem verfügt es auch über Präprocessormakros, durch die die Verwendung der Schnittstelle vereinfacht wird. Das Ergebnis ist ein flexibles Werkzeug, das einfach zu verwenden und sehr leistungsstark ist.

In einer häufig vorkommenden C/C++-Clientsituation wird ein Datensatz in einem Recordset-Objekt an eine C/C++-Struktur/-Klasse gebunden, die systemeigene C/C++-Typen enthält. Wenn Sie Daten des Typs VARIANT verwenden, müssen Sie einen Konvertierungscode von VARIANT auf systemeigene C/C++-Typen schreiben. Die ADO VC++-Erweiterungen sind dazu gedacht, diese Situation beim Programmieren in VC++ zu vereinfachen.

Weitere Informationen zu den ADO VC++-Erweiterungen finden Sie unter den folgenden Themen:

  • Verwenden von ADO VC++-Erweiterungen

  • Header der VC++-Erweiterungen im Detail

  • Beispiel:ADO ohne Erweiterungen

  • Beispiel: ADO mit Erweiterungen


Verwenden von ADO VC++-Erweiterungen

Definieren von Bindungseinträgen

Durch die ADO VC++-Erweiterungen werden die Felder eines Recordset-Objekts den C/C++-Variablen zugeordnet. Die Definition einer Zuordnung eines Feldes zu einer Variablen wird Bindungseintrag genannt. Mit den verfügbaren Präprocessormakros können Bindungseinträge für numerische Variablen, Variablen mit fester Länge und Variablen mit variabler Länge definiert werden.

Setzen Sie die Bindungseinträge zwischen die Makros BEGIN_ADO_BINDING und END_ADO_BINDING. Die Bindungseinträge dürfen nicht mit Kommas oder Semikolons enden. Diese Trennzeichen sind in den Makros angegeben.

Geben Sie einen Bindungseintrag für jedes Feld an, das in eine C/C++-Variable konvertiert werden soll. Verwenden Sie die entsprechenden Makros ADO_FIXED_LENGTH_BINDING_ENTRY, ADO_NUMERIC_BINDING_ENTRY oder ADO_VARIABLE_LENGTH_BINDING_ENTRY.

In den Parametern für die Makros ist das Recordset-Feld, das extrahiert werden soll, durch eine Ordinalzahl angegeben - Null steht für das erste Feld, Eins steht für das zweite Feld usw.

Die C/C++-Variable ist mit einem Datentyp deklariert. Ist die Variable numerisch, können Sie auch die Genauigkeit und Skalierung angeben. Ist die Variable von variabler Länge, wie z. B. eine Zeichenfolge, müssen Sie die maximale Größe der Variable in Byte angeben. Der Recordset-Feldwert wird gegebenenfalls in diesen Datentyp umgewandelt.

Geben Sie einen temporären Arbeitspuffer an, der zum Konvertieren des Feldwertes von einer Variable des Typs VARIANT in eine C/C++-Variable verwendet wird. Der Puffer muss mindestens so groß wie die C/C++-Variable sein.

Setzen Sie den booleschen Änderungsparameter auf TRUE, damit ADO das gebundene Feld aktualisieren kann, und auf FALSE, wenn Sie das Feld nur überprüfen, aber nicht verändern möchten. Die VC++-Erweiterung verwaltet keine Statusinformationen über ein Feld, so dass Sie angeben müssen, ob ADO den Wert eines Feldes ändern soll (zum Beispiel den Wert eines automatisch inkrementierten Feldes, das durch die Datenquelle verwaltet wird). Aus diesem Grund sollte der Änderungsparameter für ein solches Feld auf FALSE festgelegt werden.

Durch den Statusparameter erfahren Sie, ob die Konvertierung eines Recordset-Feldes in eine C- oder C++-Variable erfolgreich war und ob der Inhalt der Variable gültig ist. Die zwei wichtigsten Werte für diesen Parameter sind adFldOK, der anzeigt, dass die Konvertierung erfolgreich war, und adFldNull, der anzeigt, dass das Feld den Wert NULL hat - es gab keinen Wert, der konvertiert werden konnte.

Überprüfen Sie zunächst diesen Parameter, um festzustellen, ob die C- oder C++-Variable gültig ist. Wenn ein Feld z. B. einen gültigen Inhalt für eine Zeile hat, ist der Status adFldOK. Wenn Sie zu einer anderen Zeile gehen, deren Feld den Wert NULL hat, ist der Status adFldNull. Der Inhalt der C- oder C++-Variable wird jedoch nicht verändert - die Variable enthält immer noch den Wert des Feldes aus der vorherigen Zeile.

Binden des Recordset-Objekts an Variablen

Rufen Sie in der Anwendung die BindToRecordset-Schnittstellenmethode auf, um die Recordset-Felder mit den C/C++-Variablen zu verknüpfen (oder sie an diese zu binden). Die C/C++-Variablen werden automatisch aktualisiert, wenn die aktuelle Zeile des Recordset-Objekts verändert wird.

Headerdateien

Fügen Sie die folgende Datei in Ihre Anwendung ein, damit Sie die VC++-Erweiterungen verwenden können:

  • #include <icrsint.h>

Schnittstellenmethoden

Die Schnittstelle IADORecordBinding verfügt über Methoden, um Recordset-Felder mit C/C++-Variablen zu verbinden, neue Zeilen hinzuzufügen und Aktualisierungen durchzuführen. Allen drei Methoden wird ein Zeiger auf eine Klasse übergeben, die von CADORecordBinding abgeleitet ist, wodurch die Bindung zwischen jedem Feld und jeder Variable definiert ist.

Es gibt folgende Schnittstellenmethoden:

  • BindToRecordset(&binding)

    Rufen Sie diese Methode auf, um Felder mit Variablen zu verbinden.

  • AddNew(&binding)

    Rufen Sie diese Methode auf, um die ADO AddNew-Methode indirekt aufzurufen.

  • Update(&binding)

    Rufen Sie diese Methode auf, um die ADO Update-Methode indirekt aufzurufen.

Präprocessormakros

  • BEGIN_ADO_BINDING(cls)

  • ADO_FIXED_LENGTH_BINDING_ENTRY(Ordinal, DataType, Buffer, Status, Modify)

  • ADO_NUMERIC_BINDING_ENTRY(Ordinal, DataType, Buffer, Precision, Scale,
    Status, Modify)

  • ADO_VARIABLE_LENGTH_BINDING_ENTRY(Ordinal, DataType, Buffer, Size,
    Status, Modify)

  • END_ADO_BINDING()

Parameter | Beschreibung
cls | Klasse, in der die Bindungseinträge, der Puffer und das Recordset-Objekt definiert sind.
Ordinal | Ordinalzahl des Feldes; Null für das erste Feld, Eins für das zweite usw.
DataType | Datentyp der Variable, in der das konvertierte Feld gespeichert wird.
Buffer | Puffer, der zum Konvertieren des Feldes in eine Variable verwendet wird.
Status | Zeigt den Erfolg der Feldkonvertierung an.
Modify | Ein boolesches Attribut; TRUE zeigt an, dass ADO das verbundene Feld aktualisieren kann.
Precision | Anzahl der Stellen, die in der numerischen Variable dargestellt werden können.
Scale | Anzahl der Dezimalstellen in der numerischen Variable.
Size | Anzahl der Bytes, die für eine Variable mit variabler Länge, z. B. eine Zeichenfolge, erforderlich sind.

Werte des status-Parameters | Beschreibung
adFldOK | Ein Feldwert ungleich NULL wurde zurückgegeben.
adFldBadAccessor | Bindung ist ungültig.
adFldCantConvertValue | Wert konnte nicht konvertiert werden (jedoch nicht wegen unverträglicher Vorzeichen oder Datenüberlauf).
adFldNull | NULL wurde zurückgegeben.
adFldTruncated | Daten mit variabler Länge oder numerische Stellen wurden abgeschnitten.
adFldSignMismatch | Wert ist vorzeichenbehaftet, und Datentyp der Variable ist vorzeichenlos.
adFldDataOverFlow | Wert ist zu groß, um im Datentyp der Variable gespeichert werden zu können.
adFldCantCreate | Unbekannter Spaltentyp und Feld bereits geöffnet.
adFldUnavailable | Feldwert konnte nicht ermittelt werden, z. B. in einem neuen, nicht zugewiesenen Feld ohne Standardwert.
adFldPermissionDenied | Kein Schreibzugriff auf Daten bei der Aktualisierung.
adFldIntegrityViolation | Feldwert würde bei der Aktualisierung Spaltenintegrität verletzen.
adFldSchemaViolation | Feldwert würde bei der Aktualisierung Spaltenschema verletzen.
adFldBadStatus | Ungültiger Statusparameter bei der Aktualisierung.
adFldDefault | Ein Standardwert wurde bei der Aktualisierung verwendet.


Header der VC++-Erweiterungen im Detail

Der folgende Header, icrsint.h, erläutert die Schnittstellen, mit denen Clients eine Datenzeile direkt in Datenelemente einer Klasse abrufen können. Clients müssen Bindungseinträge in ihrer Klasse enthalten, um die Verbindung zwischen einem Recordset Field-Objekt und einem Datenelement einer Klasse anzugeben.

#ifndef _ICRSINT_H_
#define _ICRSINT_H_

#include <olectl.h>
#include <stddef.h>

// leitet weiter
class CADORecordBinding;

#define classoffset(base, derived) \
    ((DWORD)(static_cast<base*>((derived*)8))-8)

enum FieldStatusEnum
{
    adFldOK = 0,
    adFldBadAccessor = 1,
    adFldCantConvertValue = 2,
    adFldNull = 3,
    adFldTruncated = 4,
    adFldSignMismatch = 5,
    adFldDataOverFlow = 6,
    adFldCantCreate = 7,
    adFldUnavailable = 8,
    adFldPermissionDenied = 9,
    adFldIntegrityViolation = 10,
    adFldSchemaViolation = 11,
    adFldBadStatus = 12,
    adFldDefault = 13
};

typedef struct stADO_BINDING_ENTRY
{
    ULONG            ulOrdinal;
    WORD            wDataType;
    BYTE            bPrecision;
    BYTE            bScale;
    ULONG            ulSize;
    ULONG            ulOffSet;
    ULONG            ulIADOBindingEntriesOffSet;
    ULONG            ulFldStatusOffset;
    BOOL            fModify;
} ADO_BINDING_ENTRY;

#define BEGIN_ADO_BINDING(cls) public: \
    typedef cls ADORowClass; \
    const ADO_BINDING_ENTRY* STDMETHODCALLTYPE GetADOBindingEntries() { \
    static const ADO_BINDING_ENTRY rgADOBindingEntries[] = {

#define ADO_FIXED_LENGTH_BINDING_ENTRY(Ordinal, DataType, Buffer, \    Status, Modify)\
    {Ordinal, \
    DataType, \
    0, \
    0, \
    0, \
    offsetof(ADORowClass, Buffer), \
    classoffset(CADORecordBinding, ADORowClass), \
    offsetof(ADORowClass, Status), \
    Modify},

#define ADO_NUMERIC_BINDING_ENTRY(Ordinal, DataType, \
    Buffer, Precision, Scale, Status, Modify)\
    {Ordinal, \
    DataType, \
    Precision, \
    Scale, \
    0, \
    offsetof(ADORowClass, Buffer), \
    classoffset(CADORecordBinding, ADORowClass), \
    offsetof(ADORowClass, Status), \
    Modify},

#define ADO_VARIABLE_LENGTH_BINDING_ENTRY(Ordinal, DataType, \
    Buffer, Size, Status, Modify)\
    {Ordinal, \
    DataType, \
    0, \
    0, \
    Size, \
    offsetof(ADORowClass, Buffer), \
    classoffset(CADORecordBinding, ADORowClass), \
    offsetof(ADORowClass, Status), \
    Modify},

#define END_ADO_BINDING() {0, adEmpty, 0, 0, 0, 0, 0, adFldOK, FALSE}};\
    return rgADOBindingEntries;}

//
// Schnittstelle, die die Client-'Datensatz'-Klasse unterstützen muss.
// Die ADO Bindungseinträge stellen die Implementierung für diese Schnittstelle zur Verfügung.
//
class CADORecordBinding
{
public:
    STDMETHOD_(const ADO_BINDING_ENTRY*, GetADOBindingEntries)
    (VOID) PURE;
};

//
// Schnittstelle, mit der ein Client einen Datensatz in
// Datenelemente einer Klasse abrufen kann.
//
DEFINE_GUID(IID_IADORecordBinding,
                0x00000544, 0, 0x10, 0x80,0,0,0xAA,0,0x6D,0x2E,0xA4);
DECLARE_INTERFACE_(IADORecordBinding, IUnknown)
{
public:
    STDMETHOD(BindToRecordset)(CADORecordBinding *pAdoRecordBinding)PURE;
    STDMETHOD(AddNew)(CADORecordBinding *pAdoRecordBinding) PURE;
    STDMETHOD(Update)(CADORecordBinding *pAdoRecordBinding) PURE;
};

#endif // !_ICRSINT_H_


Beispiel: ADO ohne Erweiterungen

Der folgende Programmausschnitt zeigt, wie Werte aus Feldern abgerufen und in C++-Variablen konvertiert werden.

#import "c:\Program Files\Common Files\System\ADO\msado15.dll"
    no_namespace rename("EOF", "EndOfFile")
#include <stdio.h>

Class CEmployee
{
public:
    FetchEmployeeData();

    char m_szFirstName[30];
    char m_szLastName[30];
    int nAge;
};

CEmployee::FetchEmployeeData()
{
_ConnectionPtr    pCon();
_RecordsetPtr     pRs();
FieldPtr            pfldFirstName, pfldLastName, pfldAge;
_variant_t        vFirstName, vLastName, vAge;

pCon.CreateInstance(__uuidof(Connection));
pCon->Open(“pubs”, “sa”, “”);

pRs.CreateInstance(__uuidof(Recordset));
pRs->Open(“select FirstName, LastName, Age from Employees”, pCon,
    adOpenForwardOnly, adLockReadOnly, adCmdUnknown);

pfldFirstName = pRs->Fields->GetItem(0);
pfldLastName = pRs->Fields->GetItem(1);
pfldAge = pRs->Fields->GetItem(2);

while (VARIANT_FALSE == pRs->EndOfFile)
    {
    vFirstName.Clear();
    vLastName.Clear();
    vAge.Clear();

    vFirstName = pfldFirstName->Value;
    WideCharToMultiByte(CP_ACP, 0, vFirstName.bstrVal, -1,
        m_szFirstName, sizeof(m_szFirstName), NULL, NULL);

    vLastName = pfldLastName->Value;
    WideCharToMultiByte(CP_ACP, 0, vLastName.bstrVal, -1,
        m_szLastName, sizeof(m_szLastName), NULL, NULL);

    nAge = vAge.iVal;

    pRs->MoveNext();
    }
}


Beispiel: ADO mit Erweiterungen

Das folgende Programm zeigt, wie Werte aus Feldern abgerufen und in C++-Variablen konvertiert werden. Die für den Programmausschnitt unter Beispiel: ADO ohne Erweiterungen beschriebenen Funktionen sind darin enthalten.

#define INITGUID
#import "c:\Program Files\Common Files\System\ADO\msado15.dll"
    no_namespace rename("EOF", "EndOfFile")
#include <stdio.h>
#include "icrsint.h"

void dump_com_error(_com_error &e)
    {
printf("Error\n");
printf("\a\tCode = %08lx\n", e.Error());
printf("\a\tCode meaning = %s", e.ErrorMessage());
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
printf("\a\tSource = %s\n", (LPCSTR) bstrSource);
printf("\a\tDescription = %s\n", (LPCSTR) bstrDescription);
    }

class CCustomRs :
    public CADORecordBinding
{
BEGIN_ADO_BINDING(CCustomRs)
    ADO_VARIABLE_LENGTH_BINDING_ENTRY(1, adVarChar, m_szau_lname,
            sizeof(m_szau_lname), lau_lnameStatus, FALSE)
    ADO_VARIABLE_LENGTH_BINDING_ENTRY(2, adVarChar, m_szau_fname,
            sizeof(m_szau_fname), lau_fnameStatus, TRUE)
END_ADO_BINDING()

public:
    CHAR    m_szau_lname[41];
    ULONG    lau_lnameStatus;
    CHAR    m_szau_fname[41];
    ULONG    lau_fnameStatus;
};

VOID    main()
    {
    HRESULT hr;
    IADORecordBinding    *picRs = NULL;

    ::CoInitialize(NULL);

    try
        {
        _RecordsetPtr pRs.CreateInstance(__uuidof(Recordset));        CCustomRs rs;

        pRs->Open("select FirstName, LastName, Age from Employees",
            "dsn=pubs;uid=sa;pwd=;",
            adOpenStatic, adLockOptimistic, adCmdUnknown);

        if (FAILED(hr = pRs->QueryInterface(__uuidof(IADORecordBinding),
                (LPVOID*)&picRs)))
            _com_issue_error(hr);

        if (FAILED(hr = picRs->BindToRecordset(&rs)))
            _com_issue_error(hr);

        while (VARIANT_FALSE == pRs->EndOfFile)
            {
        // Verarbeitet Daten in den CCustomRs C++-Instanzvariablen.

            printf("\a\tName = %s \t%s",
                (lau_fnameStatus == adFldOK ? m_szau_fname : "<NULL>"),
                (lau_lnameStatus == adFldOK ? m_szau_lname): "<NULL>"));

        // Ändert die aktuelle Zeile im Recordset.
        // Recordset-Daten für die neue aktuelle Zeile werden automatisch
        // extrahiert und in den CCustomRs C++-Instanzvariablen platziert.

            pRs->MoveNext();
            }
        }
    catch (_com_error &e)
        {
        dump_com_error(e);
        }

    if (picRs)
        picRs->Release();

    CoUninitialize();
    };


Datenstrukturierung

ADO ermöglicht Ihnen die Beantwortung von Fragen, bei denen die Lösung als Recordset dargestellt werden kann. Nehmen Sie beispielsweise an, dass Sie eine Liste mit den Kunden Ihrer Firma ansehen möchten und über eine Datenbank verfügen, die eine Tabelle mit der Bezeichnung Kunden aufweist. Wenn Sie nun einen Abfragebefehl auf die Tabelle ausführen, gibt ADO Ihnen ein Recordset zurück, das in den einzelnen Zeilen die Kunden und in den verschiedenen Spalten Datentypen aufweist, die weitere Angaben, wie z. B. den Namen, die Adresse, die eindeutige Kundennummer etc. enthalten.

Die Datenstrukturierung ermöglicht Ihnen die Beantwortung von Fragen, bei denen die Lösung durch ein strukturiertes Recordset dargestellt werden kann. Bei der Datenstrukturierung werden die Spalten eines strukturierten Recordset, die Beziehungen zwischen den von den Spalten dargestellten Einheiten sowie die Art und Weise, wie das Recordset mit Daten gefüllt wird, festgelegt.

Spalten eines strukturierten Recordset können Daten eines Datenproviders, beispielsweise SQL Server, Verweise auf ein anderes Recordset, Berechnungswerte einer einzelnen Recordset-Zeile bzw. Werte eines Spaltenvorgangs eines vollständigen Recordset enthalten, oder aber es kann sich bei ihnen um vollständig neue, leere Spalten handeln.

Wenn Sie den Wert einer Spalte abrufen, die einen Verweis auf ein anderes Recordset enthält, gibt ADO das durch den Verweis dargestellte eigentliche Recordset automatisch zurück. Ein Recordset, das ein anderes Recordset enthält, wird als hierarchisches Recordset oder hierarchischer Cursor bezeichnet.

Wenn Sie z. B. eine Liste mit sämtlichen Bestellungen der einzelnen Kunden Ihrer Firma erstellen möchten, gehen Sie folgendermaßen vor. Führen Sie einen Datenstrukturierungsbefehl auf die Datenbank aus, die die Tabellen mit den Bezeichnungen Kunden und Bestellungen aufweist. Wie im vorherigen Beispiel gibt ADO ein Recordset der Kundendatensätze zurück. Jede Zeile weist jedoch eine zusätzliche Spalte auf, die auf ein Recordset verweist, das sämtliche Kundenbestellungen enthält.

Sie können diese Struktur erweitern, um eine Liste der Gesamtverkäufe, je nach Bestellungen in den verschiedenen Bundesländern, zu erstellen. Die Adressenspalte in der Kundentabelle enthält jeweils Angaben zum entsprechenden Bundesland, und die Mengenspalte der Tabelle Bestellungen die jeweils bestellte Menge. Führen Sie einen anderen Datenstrukturierungsbefehl aus, gibt Ihnen ADO ein Recordset zurück, das eine Zeile je Bundesland mit jeweils einer Spalte enthält, die das Bundesland, die Gesamtmenge aller Bestellungen für dieses Bundesland sowie einen Verweis auf ein Recordset angeben, das alle Kunden in diesem Bundesland aufführt. Greifen Sie auf dieses Kunden-Recordset zu, werden Sie feststellen, dass jede Kundenzeile -wie im vorhergehenden Beispiel- den Verweis auf ein Recordset mit sämtlichen Bestellungen dieses Kunden enthält.

Die Syntax des Strukturierungsbefehls ermöglicht Ihnen die programmgesteuerte Erstellung eines strukturierten Recordset. Anschließend können Sie programmgesteuert oder über ein entsprechendes grafisches Steuerelement auf die Komponenten des Recordset zugreifen.

Weitere Informationen zur Datenstrukturierung finden Sie unter den folgenden Themen:

  • Datenstrukturierung - Zusammenfassung

  • Erforderliche Provider für die Datenstrukturierung

  • Strukturierungsbefehle im Allgemeinen

  • Strukturierungsbefehl "Append"

  • Strukturierungsbefehl "Compute"

  • Zugreifen auf Zeilen in einem hierarchischen Recordset

  • Formale Grammatik für Strukturierungsbefehle


Datenstrukturierung - Zusammenfassung

Mit ADO 2.0 wurden Datenstrukturierungsfunktionen, hierarchische Recordsets sowie die Syntax der Strukturierungsbefehle eingeführt.

Mit ADO 2.1 werden Neustrukturierungen, Enkelaggregate (Grandchild) und parametrisierte Befehle mit eingreifenden COMPUTE-Befehlen eingeführt.

Datenstrukturierung

Bei der Datenstrukturierung haben Sie die Möglichkeit, die Spalten eines strukturierten Recordset, die Beziehungen zwischen den von den Spalten dargestellten Einheiten sowie die Art und Weise, wie das Recordset mit Daten gefüllt wird, festzulegen.

Spalten eines strukturierten Recordset können Daten eines Datenproviders, Verweise auf ein anderes Recordset, Berechnungswerte einer einzelnen Recordset-Zeile bzw. Werte eines Spaltenvorgangs eines vollständigen Recordset enthalten, oder aber es kann sich bei ihnen um vollständig neue, leere Spalten handeln.

Wenn Sie den Wert einer Spalte abrufen, die einen Verweis auf ein anderes Recordset enthält, gibt ADO das durch den Verweis dargestellte eigentliche Recordset automatisch zurück. Ein Recordset, das ein anderes Recordset enthält, wird als hierarchisches Recordset bezeichnet. Hierarchische Recordsets weisen eine Parent-Child-Beziehung auf, wobei das übergeordnete Element (Parent) das enthaltende Recordset und das untergeordnete Element (Child) das enthaltene Recordset ist. Bei einem Verweis auf ein Recordset handelt es sich eigentlich um einen Verweis auf eine Teilmenge des untergeordneten Elements, das als Kapitel bezeichnet wird. Ein einzelnes übergeordnetes Element kann mehr als ein untergeordnetes Recordset enthalten.

Mit ADO 2.0 wurde auch eine neue Strukturierungsbefehlssyntax eingeführt, mit deren Hilfe Sie strukturierte Recordset-Objekte programmgesteuert erstellen können. Ein Strukturierungsbefehl wird genau wie ein anderer ADO-Befehlstext ausgegeben.

Über die Strukturierungsbefehlssyntax können Sie hierarchische Recordset-Objekte auf zwei Arten erstellen. Bei der ersten Möglichkeit wird ein untergeordnetes Recordset einem übergeordneten Recordset angehängt. Übergeordnete und untergeordnete Recordsets müssen dabei aber mindestens über eine gemeinsame Spalte verfügen: Der Spaltenwert in einer Zeile des übergeordneten Elements stimmt mit dem Spaltenwert aller Zeilen des untergeordneten Elements überein.

Bei der zweiten Möglichkeit wird ein übergeordnetes Recordset aus einem untergeordneten erzeugt. Das übergeordnete Recordset muss eine Kapitelspalte aufweisen, die auf das untergeordnete Recordset verweist. Weitere übergeordnete Spalten werden erstellt, indem eine Aggregatoperation auf eine untergeordnete Spalte ausgeführt, Ausdrücke in einer Zeile eines Recordset berechnet, eine Gruppenspalte mit dem BY-Schlüsselwort angegeben oder neue leere Spalten angehängt werden.

Sie können hierarchische Recordset-Objekte bis zur gewünschten Tiefe verschachteln (d. h. untergeordnete Recordset-Objekte untergeordneter Recordset-Objekte erstellen, usw.).

Anschließend können Sie programmgesteuert oder über ein entsprechendes grafisches Steuerelement auf die Recordset-Komponenten des strukturierten Recordset zugreifen.

Aus diesem Grund stellt Microsoft ein grafisches Werkzeug zur Verfügung, mit dem sich Strukturierungsbefehle erstellen lassen, (siehe hierzu in der Visual Basic-Dokumentation unter "Der Data Environment Designer"), sowie ein anderes grafisches Werkzeug zum Anzeigen hierarchischer Cursor (siehe hierzu in der Visual Basic-Dokumentation unter "Verwenden des Microsoft Hierarchical FlexGrid-Steuerelements").

Neustrukturierung

Einem mit einer Klausel eines Strukturierungsbefehls erstellten Recordset kann ein Alias (für gewöhnlich mit dem AS-Schlüsselwort) zugewiesen werden. Unter ADO 2.1 kann auf den Alias eines strukturierten Recordset in einem vollständig anderen Befehl verwiesen werden. Das bedeutet, dass Sie einen neuen Strukturierungsbefehl ausgeben, um einen zuvor strukturierten Recordset zu ändern bzw. neu zu strukturieren. Damit diese Funktionalität unterstützt wird, verfügt ADO über eine neue Name-Eigenschaft des Recordset-Objekts.

Einschränkungen hierbei bestehen darin, dass Sie Spalten bestehenden Recordsets nicht hinzufügen, ein parametrisiertes Recordset oder die Recordset-Objekte in eingreifenden COMPUTE-Klauseln nicht neu strukturieren oder Aggregatoperationen ausschließlich auf neustrukturierte Recordsets durchführen können.

Enkelaggregate

Einer mit einer Klausel eines Strukturierungsbefehls erstellten Kapitelspalte kann ein Kapitelalias (für gewöhnlich mit dem AS-Schlüsselwort) zugewiesen werden. Sie können jede Spalte in allen Kapiteln des strukturierten Recordset mit einem vollständigen Namen angeben, um das untergeordnete Element mit der entsprechenden Spalte festzulegen. Enthält beispielsweise das übergeordnete Kapitel, Kap1, das untergeordnete Kapitel, Kap2, das die Mengenspalte Meng aufweist, lautet der vollständige Name Kap1.Kap2.Meng. Der vollständige Name kann anschließend als Argument für eine der Aggregatfunktionen (SUM, AVG, MAX, MIN, COUNT, STDEV oder ANY) verwendet werden.

Parametrisierte Befehle mit eingreifenden COMPUTE-Befehlen

Ein herkömmlicher parametrisierter APPEND-Strukturierungsbefehl verfügt über eine Klausel, die ein übergeordnetes Recordset mit einem Abfragebefehl erstellt, und über eine weitere Klausel, die ein untergeordnetes Recordset mit einem parametrisierten Abfragebefehl erstellt; d. h. einen Befehl mit einem Parameterplatzhalter (ein Fragezeichen "?"). Das sich ergebende strukturierte Recordset weist zwei Ebenen auf, bei dem das übergeordnete Element die obere und das untergeordnete Element die untere Ebene belegt.

Bei der Klausel, die das untergeordnete Recordset erstellt, kann es sich um eine willkürliche Anzahl verschachtelter COMPUTE-Strukturierungsbefehle handeln, bei der der am tiefsten verschachtelte Befehl die parametrisierte Abfrage enthält. Das sich ergebende strukturierte Recordset verfügt über mehrere Ebenen, bei dem das übergeordnete Element die oberste, das untergeordnete Element die unterste und eine mit COMPUTE-Strukturierungsbefehlen willkürliche erstellte Anzahl von Recordsets die eingreifenden Ebenen belegen.

Die typische Verwendung für diese Funktion dient dem Aufrufen der Aggregatfunktion und Gruppierungsmöglichkeiten von COMPUTE-Strukturierungsbefehlen, um eingreifende Recordset-Objekte mit analytischen Informationen zum untergeordneten Recordset zu erstellen. Da es sich dabei um einen parametrisierten Strukturierungsbefehl handelt, kann darüber hinaus bei jedem Zugriff auf eine Kapitelspalte des übergeordneten Elements ein neues untergeordnetes Recordset abgerufen werden. Da die eingreifenden Ebenen vom untergeordneten Element bezogen werden, werden diese ebenfalls neu berechnet.


Erforderliche Provider für die Datenstrukturierung

Für eine Datenstrukturierung sind für gewöhnlich zwei Provider erforderlich. Der Dienstprovider, Data Shaping Service für OLE DB, stellt die Datenstrukturierungsfunktionalität und der Datenprovider, beispielsweise der OLE DB-Provider für SQL Server, stellt die Datenzeilen zum Füllen des strukturierten Recordset zur Verfügung.

Der Name des Dienstproviders kann dabei als der Wert der Provider-Eigenschaft des Connection-Objekts oder als Schlüsselwort der Verbindungszeichenfolge, "Provider=", angegeben werden.

Der Name des Datenproviders kann als der Wert der dynamischen Eigenschaft "Data Provider" angegeben werden, der vom Data Shaping Service für OLE DB oder dem Schlüsselwort der Verbindungszeichenfolge, "Data Provider=", zur Properties-Auflistung des Connection-Objekts hinzugefügt wird.

Es ist kein Datenprovider erforderlich, wenn das Recordset nicht gefüllt wird (z. B., wenn alle Spalten des strukturierten Recordset mit dem NEW-Schlüsselwort erstellt werden). Geben Sie in diesem Fall "Data Provider=none" an.

Beispiel

Dim cnn  As New ADODB.Connection
cnn.Provider = "MSDataShape"
cnn.Open "Data Provider=MSDASQL;DSN=vfox;uid=sa;pwd=vfox;database=pubs”


Strukturierungsbefehle im Allgemeinen

Bei der Datenstrukturierung werden die Spalten eines strukturierten Recordset, die Beziehungen zwischen den von den Spalten dargestellten Einheiten sowie die Art und Weise, wie das Recordset mit Daten gefüllt wird, festgelegt.

Ein strukturierter Recordset kann aus den folgenden Spaltentypen bestehen:

Spaltentyp | Beschreibung
data | Felder eines Recordset, die von einem Abfragebefehl zu einem Datenprovider, einer Tabelle oder einem zuvor strukturierten Recordset zurückgegeben wurden.
chapter | Ein Verweis auf ein anderes Recordset, der als Kapitel bezeichnet wird. Kapitelspalten ermöglichen das Festlegen einer Parent-Child-Beziehung, bei der das übergeordnete Element (Parent) das die Kapitelspalte enthaltende Recordset und das untergeordnete Element (Child) das vom Kapitel dargestellte Recordset ist.
aggregate | Der Wert der Spalte wird durch Ausführen einer Aggregatfunktion auf alle Zeilen oder auf eine Spalte aller Zeilen eines untergeordneten Recordset abgeleitet. (Siehe unter "Aggregatfunktionen" in der nachstehenden Tabelle.)
calculated expression | Der Wert der Spalte wird durch Berechnen eines Visual Basic for Applications-Ausdruckes auf Spalten in derselben Zeile des Recordset abgeleitet. Der Ausdruck ist das Argument für die CALC-Funktion. (Siehe unter "Berechneter Ausdruck" in der nachstehenden Tabelle.)
new | Leere erstellte Felder, die mit Daten zu einem späteren Zeitpunkt gefüllt werden können. Die Spalte wird mit dem NEW-Schlüsselwort festgelegt. (Siehe unter "NEW-Schlüsselwort" in der nachstehenden Tabelle.)

Ein Strukturierungsbefehl kann eine Klausel enthalten, die einen Abfragebefehl zu einem zugrunde liegenden Datenprovider angibt, der das Recordset-Objekt zurückgibt. Die Syntax der Abfrage hängt von den Anforderungen dieses Datenproviders ab. In der Regel handelt es sich um Structured Query Language (SQL), ADO setzt jedoch keine besondere Abfragesprache voraus.

Sie können eine SQL JOIN-Anweisung verwenden, um zwei Tabellen zu verbinden. In einem hierarchischen Recordset-Objekt werden die Daten jedoch möglicherweise effizienter dargestellt. In jeder Zeile eines durch JOIN erstellten Recordset-Objekts können die Daten aus einer der Tabellen beliebig oft wiederholt werden. Ein hierarchisches Recordset-Objekt hat nur ein übergeordnetes Recordset-Objekt für jedes der zahlreichen untergeordneten Recordset-Objekte.

Strukturierungsbefehle können nur über Recordset-Objekte verwendet werden.

Strukturierungsbefehl können verschachtelt werden. Das bedeutet, dass es sich beim übergeordneten oder untergeordneten Befehl selbst um einen weiteren Strukturierungsbefehl handeln kann.

Weitere Informationen über das Bewegen eines hierarchischen Recordset-Objekts finden Sie unter Zugreifen auf Zeilen in einem hierarchischen Recordset-Objekt.

Genaue Informationen zu syntaktisch korrekten Strukturierungsbefehlen finden Sie unter Formale Grammatik für Strukturierungsbefehle.

Aggregatfunktionen, die CALC-Funktion und das NEW-Schlüsselwort

Datenstrukturierung unterstützt die folgenden Funktionen. Der Kapitelalias ist der Name, der dem Kapitel zugeordnet ist, das die zu bearbeitende Spalte enthält.

Ein Kapitelalias kann dabei vollständig sein und die einzelnen Kapitelspaltennamen enthalten, die zu den Kapiteln führen, die den Spaltennamen enthalten, wobei alle Bezeichnungen durch Punkte voneinander getrennt werden. Enthält beispielsweise das übergeordnete Kapitel, Kap1, das untergeordnete Kapitel, Kap2, das die Mengenspalte Meng aufweist, lautet der vollständige Name Kap1.Kap2.Meng.

Aggregatfunktionen | Beschreibung
SUM(Kapitelalias.Spaltenname) | Berechnet die Summe aller Werte in der angegebenen Spalte.
AVG(Kapitelalias.Spaltenname) | Berechnet den Durchschnitt aller Werte in der angegebenen Spalte.
MAX(Kapitelalias.Spaltenname) | Berechnet den höchsten Wert in der angegebenen Spalte.
MIN(Kapitelalias.Spaltenname) | Berechnet den niedrigsten Wert in der angegebenen Spalte.
COUNT(Kapitelalias[.Spaltenname]) | Zählt die Anzahl der Zeilen in dem angegebenen Alias oder der angegebenen Spalte.
STDEV(Kapitelalias.Spaltenname) | Berechnet die Standardabweichung in der angegebenen Spalte.
ANY(Kapitelalias.Spaltenname) | Der Wert einer Spalte (wobei der Wert der Spalte für alle Zeilen gleich ist).

Berechneter Ausdruck | Beschreibung
CALC(Ausdruck) | Berechnet einen willkürlichen Ausdruck, jedoch nur auf der Zeile eines Recordset, das die CALC-Funktion enthält. Alle VBA (Visual Basic for Applications)-Funktionen sind zulässig.

NEW-Schlüsselwort | Beschreibung
NEW (Feldtyp [(Breite | Skalierung [,Genauigkeit])] | Fügt eine leere Spalte des angegebenen Typs in das Recordset-Objekt ein.


Strukturierungsbefehl "Append"

Der Strukturierungsbefehl APPEND weist der Value-Eigenschaft von Field-Objekten in einem übergeordneten Recordset-Objekt ein untergeordnetes Recordset-Objekt zu.

Syntax

"SHAPE {übergeordneter Befehl} [[AS] übergeordneter Alias]

APPEND ({untergeordneter Befehl} [AS] untergeordneter Alias

RELATE übergeordnete Spalte TO untergeordnetes Spalte...) [[AS] Kapitelalias] ...

Beschreibung der Komponenten

Der Befehl besteht aus den folgenden Komponenten:

übergeordneter Befehl, untergeordneter Befehl Eine der nachstehenden Komponenten.

  • Ein Abfragebefehl in geschweiften Klammern ("{}"), der ein Recordset-Objekt zurückgibt. Der Befehl wird an den zugrunde liegenden Datenprovider ausgegeben und seine Syntax hängt von den Anforderungen dieses Providers ab. In der Regel ist dies Structured Query Language (SQL), ADO setzt jedoch keine besondere Abfragesprache voraus. Bei den Klammern ("()") handelt es sich um ein erforderliches Schlüsselwort; sie fügen einer Kapitelspalte ein untergeordnetes Element hinzu, das auf das von einem Abfragebefehl zurückgegebene Recordset verweist.

  • Der Name des zuvor strukturierten Recordset.

  • Ein weiterer Strukturierungsbefehl.

  • Das TABLE-Schlüsselwort mit nachfolgendem Namen der Tabelle.

übergeordnete Spalte Eine Spalte im Recordset-Objekt, das durch den übergeordneten Befehl zurückgegeben wird.

untergeordnete Spalte Eine Spalte im Recordset-Objekt, das durch den untergeordneten Befehl zurückgegeben wird.

... Die "übergeordnete Spalte TO untergeordnete Spalte"-Klausel ist eigentlich eine Auflistung, in der die einzelnen festgelegten Beziehungen durch Kommata voneinander getrennt sind.

Kapitelalias Ein Alias, der sich auf die dem übergeordneten Element hinzugefügte Spalte bezieht.

übergeordneter Alias Ein Alias, der sich auf das übergeordnete Recordset bezieht.

untergeordneter Alias Ein Alias, der sich auf das untergeordnete Recordset bezieht.

... Die Klausel hinter dem APPEND-Schlüsselwort ist eigentlich eine Auflistung, bei der die einzelnen Klauseln durch Kommata voneinander getrennt sind und eine weitere Spalte festlegen, die dem übergeordneten Element hinzugefügt werden soll.

Operation

Der übergeordnete Befehl wird ausgegeben und ein übergeordnetes Recordset zurückgegeben. Anschließend wird der untergeordnete Befehl ausgegeben und das untergeordnete Recordset zurückgegeben.

Der übergeordnete Befehl kann z. B. ein Recordset-Objekt mit Kunden eines Unternehmens aus einer Kundentabelle zurückgeben und der untergeordnete Befehl kann aus einer Tabelle mit allen Bestellungen ein Recordset-Objekt mit den Bestellungen für alle Kunden zurückgeben.

Die übergeordneten und untergeordneten Recordset-Objekte müssen jeweils eine gemeinsame Spalte aufweisen, über die die übergeordneten und untergeordneten Elemente verbunden sind. Die Spalten sind in der RELATE-Klausel benannt, zuerst die übergeordnete Spalte, dann die untergeordnete Spalte. Die Spalten können in den entsprechenden Recordset-Objekten unterschiedliche Namen haben, sie müssen sich aber auf dieselben Daten beziehen, um eine sinnvolle Beziehung anzugeben. Beispielsweise können die Kunden- und Bestellungen-Recordsets ein gemeinsames KundenID-Feld aufweisen.

Die Datenstrukturierung fügt eine Kapitelspalte dem übergeordneten Recordset hinzu. Die Werte in der Kapitelspalte verweisen auf Zeilen im untergeordneten Recordset-Objekt, die die RELATE-Klausel erfüllen. Das bedeutet, dass derselbe Wert sowohl in der übergeordneten Spalte einer bestimmten übergeordneten Zeile als auch in der untergeordneten Spalte in allen Zeilen des untergeordneten Kapitels ist.

Wenn Sie auf den Verweis in der Kapitelspalte zugreifen, ruft ADO automatisch das mit dem Verweis dargestellte Recordset ab. Beachten Sie, dass das Kapitel nur eine Teilmenge der Zeilen darstellt, auch wenn das gesamte untergeordnete Recordset abgerufen wurde.

Verfügt die hinzugefügte Spalte über keinen Kapitelalias, wird ein entsprechender Name automatisch erstellt. Der Fields-Auflistung des Recordset-Objekts wird ein Field-Objekt für die Spalte hinzugefügt und als Datentyp wird adChapter verwendet.

Weitere Informationen über das Bewegen eines hierarchischen Recordset-Objekts finden Sie unter Zugreifen auf Zeilen in einem hierarchischen Recordset-Objekt.

Parametrisierte Befehle

Wenn Sie mit einem sehr komplexen untergeordneten Recordset arbeiten -im Besonderen auf die Größe des übergeordneten Recordset bezogen- jedoch nur auf einige untergeordnete Kapitel zugreifen müssen, ist es gegebenenfalls effizienter, parametrisierte Befehle zu verwenden.

Ein nicht-parametrisierter Befehl ruft sowohl vollständige übergeordnete als auch untergeordnete Recordsets ab, fügt dem übergeordneten Element eine Kapitelspalte hinzu und ordnet dann einen Verweis auf das zugehörige untergeordnete Kapitel für die einzelnen übergeordneten Zeilen zu.

Ein parametrisierter Befehl ruft den gesamten übergeordneten Recordset auf, ruft jedoch nur das Kapitel-Recordset auf, wenn auf die Kapitelspalte zugegriffen wird. Dieser Unterschied bei den Abrufstrategien kann zu erheblichen Leistungssteigerungen führen.

Sie können z. B. folgendes angeben:

"SHAPE {SELECT * FROM customer}
    APPEND ({SELECT * FROM orders WHERE cust_id = ?}
    RELATE cust_id TO PARAMETER 0)"

Die übergeordnete und die untergeordnete Tabelle weisen den gemeinsamen Spaltennamen, cust_id auf. Der untergeordnete Befehl hat einen Platzhalter ("?"), auf den sich die RELATE-Klausel bezieht ("...PARAMETER 0"). Die Beziehung besteht zwischen der übergeordneten Spalte der explizit angegebenen customer-Tabelle, cust_id, und der untergeordneten Spalte der implizit angegebenen orders-Tabelle, cust_id, die durch den Platzhalter und "PARAMETER 0" festgelegt werden.

Anmerkung Die PARAMETER-Klausel bezieht sich nur auf die Strukturierungsbefehlssyntax. Sie ist weder mit dem ADO Parameter-Objekt noch der Parameters-Auflistung verbunden.

Wird der Strukturierungsbefehl ausgeführt, werden die folgenden Vorgänge durchgeführt:

  1. Der übergeordnete Befehl wird ausgeführt und gibt ein untergeordnetes Recordset aus der customer-Tabelle zurück.

  2. Eine Kapitelspalte wird an das übergeordnete Recordset-Objekt angehängt.

  3. Wird auf die Kapitelspalte einer übergeordneten Zeile zugegriffen, ersetzt der Wert der customer.cust_id-Spalte den Platzhalter für orders.cust_id, und wird der untergeordnete Befehl ausgeführt.

  4. Es werden sämtliche Zeilen aus der orders-Tabelle abgerufen, bei denen der Wert der orders.cust_id-Spalte dem der customer.cust_id-Spalte entspricht.

  5. Ein Verweis auf die abgerufenen untergeordneten Zeilen (d. h. das Kapitel des untergeordneten Recordset) wird in die Kapitelspalte der aktuellen Zeile des übergeordneten Recordset positioniert.

  6. Die Schritte 3-5 werden wiederholt ausgeführt, wenn auf die Kapitelspalte einer weiteren Zeile zugegriffen wird.

Eingreifende COMPUTE-Strukturierungsbefehle

Sie können nun den parametrisierten Befehle eines parametrisierten Strukturierungsbefehls in eine willkürlich verschachtelte Anzahl von COMPUTE-Strukturierungsbefehlen einbetten. Beispiel:

SHAPE {select au_lname, state from authors} APPEND
    ((SHAPE
        ((SHAPE
            {select * from authors where state = ?} rs
        COMPUTE rs, ANY(rs.state) state, ANY(rs.au_lname) au_lname
        BY au_id) rs2
    COMPUTE rs2, ANY(rs2.state) BY au_lname)
RELATE state TO PARAMETER 0)


Strukturierungsbefehl "Compute"

Ein COMPUTE-Strukturierungsbefehl erzeugt erstens ein übergeordnetes Recordset, dessen Spalten einen Verweis auf das untergeordnete Recordset enthalten; zweitens optionale Spalten, deren Inhalt das Ergebnis ausgeführter Aggregatfunktionen auf das untergeordnete Recordset oder auf ein zuvor strukturiertes Recordset ist; und drittens beliebige Spalten aus dem untergeordneten Recordset, die in der optionalen BY-Klausel aufgeführt sind.

Syntax

"SHAPE {untergeordneter Befehl} [AS] untergeordneter Alias

COMPUTE untergeordneter Alias [ ,Aggregat-Befehl-Feld-Liste]

[BY Gruppen-Feld-Liste]"

Beschreibung der Komponenten

Der Befehl besteht aus den folgenden Komponenten:

untergeordneter Befehl Eine der nachstehenden Komponenten.

  • Ein Abfragebefehl in geschweiften Klammern ("{}"), der ein untergeordnetes Recordset-Objekt zurückgibt. Der Befehl wird an den zugrundeliegenden Datenprovider ausgegeben und seine Syntax hängt von den Anforderungen dieses Providers ab. In der Regel ist dies Structured Query Language (SQL), ADO setzt jedoch keine besondere Abfragesprache voraus.

  • Der Name des zuvor strukturierten Recordset.

  • Ein weiterer Strukturierungsbefehl.

  • Das TABLE-Schlüsselwort mit nachfolgendem Namen der Tabelle.

untergeordneter Alias Ein Alias, der auf das Recordset-Objekt verweist, das durch den untergeordneten Befehl zurückgegeben wird. Der untergeordnete Alias ist in der Spaltenauflistung der COMPUTE-Klausel erforderlich und legt die Beziehung zwischen den übergeordneten und untergeordneten Recordset-Objekten fest.

Aggregat-Befehl-Feld-Liste Eine Auflistung, die eine Spalte im erzeugten übergeordneten Element festlegt und einen Wert aufweist, der das Ergebnis einer Aggregatfunktion auf das untergeordnete Recordset ist.

Gruppen-Feld-Liste Eine Auflistung von Spalten in den übergeordneten und untergeordneten Recordset-Objekten, die festlegen, wie Zeilen im untergeordneten Element gruppiert werden sollen.

Für die einzelnen Spalten in Gruppen-Feld-Liste gibt es entsprechende Spalten in den übergeordneten und untergeordneten Recordset-Objekten. Die Gruppen-Feld-Liste-Spalten haben für die einzelnen Zeilen im übergeordneten Recordset eindeutige Werte, und das von der übergeordneten Zeile referenzierte untergeordnete Recordset enthält ausschließlich untergeordnete Zeilen, deren Gruppen-Feld-Liste-Spalten denselben Wert wie die übergeordneten Zeilen aufweisen.

Enthält die COMPUTE-Klausel eine Aggregatfunktion, jedoch keine BY-Klausel, ist lediglich eine einzige übergeordnete Zeile mit einem Aggregatwert für das gesamte untergeordnete Recordset vorhanden. Ist jedoch eine BY-Klausel vorhanden, sind möglicherweise mehrere übergeordnete Zeilen mit jeweils einem Verweis sowie einem Aggregatwert für ein untergeordnetes Recordset vorhanden.

Operation

Der untergeordnete Befehl wird zum Provider ausgegeben, der anschließend das untergeordnete Recordset zurückgibt.

Die COMPUTE-Klausel gibt die Spalten des übergeordneten Recordset an, wobei es sich um einen Verweis auf das untergeordnete Recordset, eine oder mehrere Aggregate, berechnete Ausdrücke oder neue Spalten handeln kann. Ist auch eine BY-Klausel vorhanden, werden die entsprechend angegebenen Spalten ebenfalls dem übergeordneten Recordset hinzugefügt. Die BY-Klausel gibt an, wie die Zeilen des untergeordneten Recordset gruppiert werden.

Beispielsweise verfügen Sie über eine Tabelle mit demografischen Daten, die die Felder Bundesstaat, Stadt und Bevölkerung hat (die Bevölkerungszahlen dienen nur der Veranschaulichung).

Bundesstaat | Stadt | Bevölkerung
WA | Seattle | 700.000
OR | Medford | 200.000
OR | Portland | 600.000
CA | Los Angeles | 900.000
CA | San Diego | 400.000
WA | Tacoma | 500.000
OR | Corvallis | 300.000

Geben Sie nun folgenden Strukturierungsbefehl aus:

    rst.Open        "SHAPE  {select * from demographics} AS rs
                    COMPUTE SUM(rs.population), rs
                    BY state",
                    connection

Dieser Befehl öffnet ein strukturiertes Recordset mit zwei Ebenen. Bei der übergeordneten Ebene handelt es sich um ein erzeugtes Recordset mit einer Aggregatspalte (SUM(rs.Bevölkerung)), einer auf das untergeordnete Recordset (rs) verweisenden Spalte sowie einer zum Gruppieren des untergeordneten Recordset (Bundesstaat) verwendeten Spalte. Bei der untergeordneten Ebene handelt es sich um das vom Abfragebefehl (select * from demographics) zurückgegebene Recordset.

Die untergeordneten Recordset-Detailzeilen werden nach Bundesstaat gruppiert, aber ansonsten in keiner bestimmten Reihenfolge. Das heißt, die Gruppen stehen nicht in einer bestimmten alphabetischen oder numerischen Reihenfolge.

Sie können sich nun durch das geöffnete übergeordnete Recordset-Objekt bewegen und auf die einzelnen untergeordneten Recordset-Objekte zugreifen. Siehe auch Zugreifen auf Zeilen in einem hierarchischen Recordset-Objekt.

Entstandene über- und untergeordnete Detail-Recordsets

Übergeordnet

SUM (rs.Bevölkerung) | rs | Bundesstaat
1.300.000 | Verweis auf Untergeordnet1 | CA
1.200.000 | Verweis auf Untergeordnet2 | WA
1.100.000 | Verweis auf Untergeordnet3 | OR

Untergeordnet1

Bundesstaat | Stadt | Bevölkerung
CA | Los Angeles | 900.000
CA | San Diego | 400.000

Untergeordnet2

Bundesstaat | Stadt | Bevölkerung
WA | Seattle | 700.000
WA | Tacoma | 500.000

Untergeordnet3

Bundesstaat | Stadt | Bevölkerung
OR | Medford | 200.000
OR | Portland | 600.000
OR | Corvallis | 300.000


Zugreifen auf Zeilen in einem hierarchischen Recordset-Objekt

In dem folgenden Beispiel wird gezeigt, welche Schritte zum Zugreifen auf Zeilen in einem hierarchischen Recordset-Objekt erforderlich sind:

  1. Die Recordset-Objekte der Tabellen authors und titleauthors sind durch eine author ID miteinander verbunden.

  2. Die äußere Schleife zeigt den Vor- und Nachnamen jedes Verfassers, den Bundesstaat und die Identifikation.

  3. Das angehängte Recordset-Objekt jeder Zeile wird aus der Fields-Auflistung abgerufen und rstTitleAuthor zugewiesen.

  4. Die innere Schleife zeigt vier Felder jeder Zeile im angehängten Recordset-Objekt an.

(Die StayInSync-Eigenschaft ist zur Veranschaulichung auf FALSE gesetzt, so dass Sie die Kapiteländerungen bei jedem Durchlaufen der äußeren Schleife explizit sehen können. Jedoch ist das Beispiel effizienter, wenn die Zuordnung in Schritt 3 vor die erste Zeile in Schritt 2 verschoben wird, so dass die Zuordnung nur ein einziges Mal durchgeführt wird. Setzen Sie dann die StayInSync-Eigenschaft auf TRUE, so dass rstTitleAuthor implizit und automatisch zum entsprechenden Kapitel geändert wird, sobald sich rst zu einer neuen Zeile bewegt.)

Beispiel

Sub datashape()
    Dim cnn  As New ADODB.Connection
    Dim rst As New ADODB.Recordset
    Dim rstTitleAuthor As New ADODB.Recordset

    cnn.Provider = "MSDataShape"
    cnn.Open     "Data Provider=MSDASQL;" & _
                    "DSN=vfox;uid=sa;pwd=vfox;database=pubs”
'SCHRITT 1
    rst.StayInSync = FALSE
    rst.Open     "SHAPE  {select * from authors}
                    APPEND ({select * from titleauthor}
                    RELATE au_id TO au_id) AS chapTitleAuthor",
                    cnn
'SCHRITT 2
    While Not rst.EOF
        Debug.Print     rst("au_fname"), rst("au_lname"),
                            rst("state"), rst("au_id")
'SCHRITT 3
        Set rstTitleAuthor = rst("chapTitleAuthor").Value
'SCHRITT 4
        While Not rstTitleAuthor.EOF
            Debug.Print rstTitleAuthor(0), rstTitleAuthor(1),
                                rstTitleAuthor(2), rstTitleAuthor(3)
            rstTitleAuthor.MoveNext
        Wend
        rst.MoveNext
    Wend
End Sub


Formale Grammatik für Strukturierungsbefehle

Im Folgenden werden die grammatischen Formen für die Erstellung eines Strukturierungsbefehls erläutert.

  • Grammatisch erforderliche Begriffe sind Textzeichenfolgen, die in spitze Klammern ("<>") eingeschlossen sind.

  • Optionale Begriffe sind in eckige Klammern ("[ ]") eingeschlossen.

  • Alternativen sind durch einen senkrechten Strich ("|") gekennzeichnet.

  • Sich wiederholende Alternativen sind durch Auslassungspunkte ("...") gekennzeichnet.

  • Alpha kennzeichnet eine Zeichenfolge, die aus Buchstaben besteht.

  • Ziffer kennzeichnet eine numerische Zeichenfolge.

  • Unicode-Ziffer kennzeichnet eine Zeichenfolge aus Unicode-Ziffern.

Alle anderen Begriffe sind Literale.

Begriff Definition
<Strukturierungsbefehl>

SHAPE [<Tabellenausdruck > [[AS] <Alias>]][<Strukturierungsaktion>]

<Tabellenausdruck>

{<native-sql-Anweisung>} |

(<Strukturierungsbefehl>) |
TABLE <zitierter Name> |
<zitierter Name>

<Strukturierungsaktion>

APPEND <Alias-Feld-Liste> |

COMPUTE <Alias-Feld-Liste>
    [BY <Feld-Liste> [[AS] <Alias>]]

<Alias-Feld-Liste>

<Alias-Feld> [, <Alias-Feld...]

<Alias-Feld>

<Feldausdruck> [[AS] <Alias>]

<Feldausdruck>

(<Beziehungsausdruck>) |

<berechneter Ausdruck>

<Beziehungsausdruck>

<Tabellenausdruck> [[AS] <Alias>]

    RELATE <Beziehung-Bedingung-Liste>

<Beziehung-Bedingung-Liste>

<Beziehung-Bedingung> [, <Beziehung-Bedingung>...]

<Beziehung-Bedingung>

<Feldname> TO <untergeordneter Verweis>

<untergeordneter Verweis>

<Feldname> |

PARAMETER <parametrisierter Verweis>

<parametrisierter Verweis>

<Nummer>

<Feld-Liste>

<Feldname [, <Feldname>]

<berechneter Ausdruck>

SUM(<angegebener-Feldname>) |

AVG(<angegebener-Feldname>) |
MIN(<angegebener-Feldname>) |
MAX(<angegebener-Feldname>) |
COUNT(<Alias> | <angegebener-Feldname>) |
STDEV(<angegebener-Feldname>) |
ANY(<angegebener-Feldname>) |
CALC(<Ausdruck>)

<angegebener-Feldname>

<Alias>.[<Alias>...]<Feldname>
<Alias>

<zitierter Name>

<Feldname>

<zitierter Name>

<zitierter Name>

"<Zeichenfolge>" |

'<Zeichenfolge>' |
[<Zeichenfolge>] |
<Name>

<Name>

Alpha [ Alpha | Ziffer | _ | # ...]

<Nummer>

Ziffer [Ziffer...]

<Zeichenfolge>

Unicode-Zeichen [Unicode-Zeichen...]

<Ausdruck>
 Ein Visual Basic for Applications-Ausdruck, bei dessen Operanden es sich um andere Nicht-CALC-Spalten in derselben Zeile handelt.


DataFactory-Anpassung

Mit Remote Data Service (RDS) können Sie auf einfache Weise auf Daten in einem Client/Server-System mit drei Ebenen zugreifen. Ein Daten-Steuerelement des Clients gibt Parameter für Verbindungs- und Befehlszeichenfolgen an, die eine Abfrage auf einer Remotedatenquelle durchführen, oder Parameter für Verbindungszeichenfolgen und Recordset-Objekte, die eine Aktualisierung durchführen.

Die Parameter werden an ein Serverprogramm übergeben, das die eigentliche Datenzugriffsoperation auf der Remotedatenquelle durchführt. RDS verfügt über ein Standardserverprogramm, das RDSServer.DataFactory-Objekt. Das RDSServer.DataFactory-Objekt gibt jedes Recordset-Objekt, das durch eine Abfrage erstellt wird, an den Client zurück.

RDSServer.DataFactory ist jedoch begrenzt auf die Durchführung von Abfragen und Aktualisierungen. Es kann keine Überprüfung oder Verarbeitung der Verbindungs- oder Befehlszeichenfolgen durchführen.

Mit ADO können Sie angeben, dass DataFactory in Verbindung mit einer anderen Art von Serverprogramm arbeitet, die Behandlungsroutine genannt wird. Die Behandlungsroutine kann Verbindungs- und Befehlszeichenfolgen des Clients verändern, bevor diese für den Zugriff auf Datenquellen verwendet werden. Darüber hinaus kann die Behandlungsroutine Zugriffsrechte erzwingen, die die Berechtigung des Clients, Daten aus einer Datenquelle zu lesen oder in eine Datenquelle zu schreiben, steuern.

Die Parameter, die die Behandlungsroutine zum Verändern der Clientparameter und Zugriffsrechte verwendet, sind in Abschnitten einer Anpassungsdatei angegeben.

Weitere Informationen zur Anpassung des DataFactory-Objekts finden Sie unter den folgenden Themen:

  • Erklärung der Anpassungsdatei

  • Connect-Abschnitt der Anpassungsdatei

  • SQL-Abschnitt der Anpassungsdatei

  • UserList-Abschnitt der Anpassungsdatei

  • Logs-Abschnitt der Anpassungsdatei

  • Erforderliche Clienteinstellungen

  • Schreiben einer eigenen benutzerdefinierten Behandlungsroutine


Erklärung der Anpassungsdatei

Jeder Abschnittsheader in der Anpassungsdatei besteht aus eckigen Klammern ([]), die einen Typ und Parameter enthalten. Die vier Abschnittstypen werden durch die Literalzeichenfolgen connect, sql, userlist oder logs angezeigt. Der Parameter ist die Literalzeichenfolge, der Standard, ein vom Benutzer angegebener Bezeichner oder ein fehlender Eintrag.

Aus diesem Grund ist jeder Abschnitt durch einen der folgenden Abschnittsheader gekennzeichnet:

[ connect    default        ]
[ connect    Bezeichner    ]
[ sql            default        ]
[ sql            Bezeichner    ]
[ userlist    Bezeichner    ]
[ logs                        ]

Die Abschnittsheader bestehen aus den folgenden Teilen:

Teil | Beschreibung
Connect | Literalzeichenfolge – Dieser Abschnitt verändert eine Verbindungszeichenfolge.
Sql | Literalzeichenfolge – Dieser Abschnitt verändert eine Befehlszeichenfolge.
Userlist | Literalzeichenfolge – Dieser Abschnitt verändert die Zugriffsrechte eines bestimmten Benutzers.
Logs | Literalzeichenfolge – Dieser Abschnitt gibt eine Protokolldatei an, die Operationsfehler aufzeichnet.
default | Literalzeichenfolge – Dieser Abschnitt wird verwendet, wenn kein Bezeichner angegeben ist oder gefunden wird.
Bezeichner Eine Zeichenfolge, die mit einer Zeichenfolge in der Verbindungs- oder Befehlszeichenfolge übereinstimmt.
  • Verwenden Sie diesen Abschnitt, wenn der Abschnittsheader connect enthält und die Bezeichnerzeichenfolge in der Verbindungszeichenfolge gefunden wird.

  • Verwenden Sie diesen Abschnitt, wenn der Abschnittsheader sql enthält und die Bezeichnerzeichenfolge in der Befehlszeichenfolge gefunden wird.

  • Verwenden Sie diesen Abschnitt, wenn der Abschnittsheader userlist enthält und die Bezeichnerzeichenfolge mit einem Bezeichner des connect-Abschnitts übereinstimmt.

DataFactory ruft die Behandlungsroutine auf, wobei Clientparameter übertragen werden. Die Behandlungsroutine sucht nach ganzen Zeichenfolgen in den Clientparametern, die mit Bezeichnern in den entsprechenden Abschnittsheadern übereinstimmen. Wird eine Übereinstimmung gefunden, wird der Inhalt dieses Abschnitts auf die Clientparameter angewendet.

Unter den folgenden Umständen wird ein bestimmter Abschnitt verwendet:

  • Ein connect-Abschnitt wird verwendet, wenn der angegebene Wert für das Schlüsselwort der Clientverbindungszeichenfolge, "Data Source=value", mit einem connect-Abschnittsbezeichner übereinstimmt.

  • Ein sql-Abschnitt wird verwendet, wenn die Clientbefehlszeichenfolge eine Zeichenfolge enthält, die mit einem sql-Abschnittsbezeichner übereinstimmt.

  • Ein connect- oder sql-Abschnitt wird mit einem Standardparameter verwendet, wenn kein Bezeichner übereinstimmt.

  • Ein userlist-Abschnitt wird verwendet, wenn der userlist-Abschnittsbezeichner mit einem connect-Abschnittsbezeichner übereinstimmt. Gibt es eine Übereinstimmung, wird der Inhalt des userlist-Abschnitts für die Verbindung übernommen, die durch den connect-Abschnitt gesteuert wird.

  • Stimmt die Zeichenfolge in einer Verbindungs- oder Befehlszeichenfolge nicht mit dem Bezeichner eines connect- oder sql-Abschnittsheaders überein und gibt es keine connect- oder sql-Abschnittsheader mit einem Standardparameter, wird die Clientzeichenfolge ohne Veränderung verwendet.

  • Der log-Abschnitt wird verwendet, wenn DataFactory ausgeführt wird.


Connect-Abschnitt der Anpassungsdatei

Der connect-Abschnitt kann Folgendes enthalten:

  • Eine neue Verbindungszeichenfolge, die die Clientverbindungszeichenfolge ersetzt.

  • Einen Standardzugriffseintrag, der die standardmäßigen Lese- und Schreiboperationen angibt, die in dieser Verbindung erlaubt sind. Gibt es in diesem Abschnitt keinen Standardzugriffseintrag, wird der Abschnitt ignoriert.

Syntax

Eine Ersetzungsverbindungszeichenfolge weist die folgende Form auf:

Connect=Verbindungszeichenfolge

Ein Standardzugriffseintrag weist die folgende Form auf:

Access=Zugriffsrecht

Teil | Beschreibung
Connect | Literalzeichenfolge – Zeigt an, dass es sich hier um einen Verbindungszeichenfolgeneintrag handelt.
Verbindungszeichenfolge | Eine Zeichenfolge, die die gesamte Clientverbindungszeichenfolge ersetzt.
Access | Literalzeichenfolge – Zeigt an, dass es sich hier um einen Zugriffseintrag handelt.
Zugriffsrecht Eines der folgenden Zugriffsrechte:
  • NoAccess - Benutzer kann nicht auf die Datenquelle zugreifen.

  • ReadOnly - Benutzer kann die Datenquelle lesen.

  • ReadWrite - Benutzer kann die Datenquelle lesen oder in sie schreiben.


SQL-Abschnitt der Anpassungsdatei

Der sql-Abschnitt kann eine neue SQL-Zeichenfolge enthalten, die die Clientbefehlszeichenfolge ersetzt. Ist keine SQL-Zeichenfolge in dem Abschnitt vorhanden, wird der Abschnitt ignoriert.

Die neue SQL-Zeichenfolge kann parametrisiert sein. Dies bedeutet, dass Parameter in der SQL-Zeichenfolge des sql-Abschnitts (gekennzeichnet durch das Zeichen ?) durch entsprechende Argumente in einem Bezeichner in der Clientbefehlszeichenfolge (gekennzeichnet durch eine in Klammern gesetzte, durch Kommas getrennte Liste) ersetzt werden können. Der Bezeichner und die in Klammern gesetzte Liste von Argumenten verhalten sich wie ein Funktionsaufruf.

Angenommen, die Clientbefehlszeichenfolge lautet z. B. "CustomerByID(4)", der SQL-Abschnittsheader [SQL CustomerByID] und die neue SQL-Abschnittszeichenfolge "SELECT * FROM Customers WHERE CustomerID = ?". Dann wird die Behandlungsroutine "SELECT * FROM Customers WHERE CustomerID = 4" erstellt und mit dieser Zeichenfolge die Datenquelle abfragen.

Ist die neue SQL-Anweisung eine leere Zeichenfolge (""), wird der Abschnitt ignoriert.

Ist die Zeichenfolge der neuen SQL-Anweisung ungültig, schlägt die Ausführung der Anweisung fehl. Der Clientparameter wird effektiv ignoriert. Sie können dies bewusst einsetzen, wenn Sie alle SQL-Befehle des Clients "ausschalten" möchten, indem Sie Folgendes angeben:

[SQL default]
SQL = " "

Syntax

Ein Eintrag in der SQL-Ersetzungszeichenfolge weist die folgende Form auf:

SQL=sqlZeichenfolge

Teil | Beschreibung
SQL | Literalzeichenfolge – Zeigt an, dass es sich hier um einen SQL-Abschnittseintrag handelt.
sqlZeichenfolge | Eine SQL-Zeichenfolge, die die Clientzeichenfolge ersetzt.


UserList-Abschnitt der Anpassungsdatei

Der userlist-Abschnitt gehört zum connect-Abschnitt mit demselben Abschnitts bezeichnerparameter.

Dieser Abschnitt kann einen Benutzerzugriffseintrag enthalten, der Zugriffsrechte für einen bestimmten Benutzer angibt und den Standardzugriffseintrag im übereinstimmenden connect-Abschnitt überschreibt.

Syntax

Ein Benutzerzugriffseintrag weist die folgende Form auf:

Benutzername=Zugriffsrechte

Teil | Beschreibung
Benutzername | Der Benutzername der Person, die diese Verbindung benutzt. Gültige Benutzernamen werden mit dem IIS Service Manager-Dialog eingerichtet.
Zugriffsrechte Eines der folgenden Zugriffsrechte:
  • NoAccess - Benutzer kann nicht auf die Datenquelle zugreifen.

  • ReadOnly - Benutzer kann die Datenquelle lesen.

  • ReadWrite - Benutzer kann die Datenquelle lesen oder in sie schreiben.


Logs-Abschnitt der Anpassungsdatei

Der logs-Abschnitt enthält einen Protokolldateieintrag, der den Namen einer Datei angibt, die Fehler während der Ausführung von DataFactory aufzeichnet.

Syntax

Ein Protokolldateieintrag weist die folgende Form auf:

err=Dateiname

Teil | Beschreibung
err | Literalzeichenfolge – Zeigt an, dass es sich hier um einen Protokolldateieintrag handelt.
Dateiname | Ein vollständiger Pfad- und Dateiname. Der typische Dateiname lautet c:\msdfmap.log.

Die Protokolldatei enthält den Benutzernamen, HRESULT sowie Datum und Zeit jedes Fehlers.


Erforderliche Clienteinstellungen

Geben Sie die folgenden Einstellungen an, um eine benutzerdefinierte DataFactory-Behandlungsroutine zu verwenden.

  • Geben Sie "Provider=MS Remote" in der Provider-Eigenschaft des Connection-Objekts oder das Schlüsselwort "Provider=" der Verbindungszeichenfolge des Connection-Objekts an.

  • Stellen Sie die CursorLocation-Eigenschaft auf adUseClient ein.

  • Geben Sie den Namen der Behandlungsroutine an, die in der Handler-Eigenschaft des RDS.DataControl-Objekts verwendet werden soll, oder das Schlüsselwort "Handler=" der Verbindungszeichenfolge des Recordset-Objekts. (Es ist nicht möglich, die Behandlungsroutine in der Verbindungszeichenfolge des Connection-Objekts festzulegen.)

    RDS stellt eine standardmäßige Behandlungsroutine mit dem Namen MSDFMAP.Handler auf dem Server zur Verfügung. (Die standardmäßige Anpassungsdatei heißt MSDFMAP.INI.)

Beispiel

Voraussetzung ist, dass die folgenden Abschnitte in MSDFMAP.INI und der Datenquellenname, AdvWorks, zuvor definiert worden sind:

[connect CustomerDataBase]
Access=ReadWrite
Connect="DSN=AdvWorks"

[sql CustomerById]
SQL="SELECT * FROM Customers WHERE CustomerID = ?"

Die folgenden Codeteile wurden in Visual Basic geschrieben:

RDS.DataControl-Version:

Dim dc as New RDS.DataControl
Set dc.Handler = "MSDFMAP.Handler"
Set dc.Server = "http://YourServer"
Set dc.Connect = "Data Source=CustomerDatabase"
Set dc.SQL = "CustomerById(4)"
dc.Refresh

Recordset-Version:

Dim rs as New ADODB.Recordset
rs.CursorLocation = adUseClient

Geben Sie die Handler-Eigenschaft oder das Handler-Schlüsselwort, die Provider-Eigenschaft oder das Provider-Schlüsselwort sowie die Bezeichner CustomerById und CustomerDatabase an. Öffnen Sie dann das Recordset-Objekt:

rs.Open "CustomerById(4)", "Handler=MSDFMAP.Handler;" & _
    "Provider=MS Remote;Data Source=CustomerDatabase;" & _
    "Remote Server=http://YourServer"


Schreiben einer eigenen benutzerdefinierten Behandlungsroutine

Wenn Sie mit der Administration eines IIS-Servers betraut sind und zwar die standardmäßige RDS-Unterstützung wünschen, aber die Benutzeranfragen und Zugriffsrechte stärker kontrollieren möchten, könnten Sie unter Umständen Ihre eigene Behandlungsroutine schreiben.

Durch MSDFMAP.Handler wird die IdataFactoryHandler-Schnittstelle implementiert.

IdataFactoryHandler-Schnittstelle

Diese Schnittstelle hat zwei Methoden, GetRecordset und Reconnect. Für beide Methoden muss die CursorLocation-Eigenschaft auf adUseClient gesetzt sein.

Beide Methoden verwenden Argumente, die nach dem ersten Komma im Schlüsselwort "Handler=" stehen. "Handler=progid,arg1,arg2;" übergibt z. B. die Argumentzeichenfolge "arg1,arg2", und "Handler=progid" übergibt ein NULL-Argument.

GetRecordset-Methode

Diese Methode fragt die Datenquelle ab und erstellt ein neues Recordset-Objekt mit den angegebenen Argumenten. Das Recordset-Objekt muss mit adLockBatchOptimistic geöffnet werden; es darf nicht asynchron geöffnet werden.

Argumente

conn Die Verbindungszeichenfolge.

args Argumente für die Behandlungsroutine.

query Der Befehlstext zur Durchführung einer Abfrage.

ppRS Zeiger, der angibt, wohin das Recordset zurückgegeben werden soll.

Reconnect-Methode

Diese Methode aktualisiert die Datenquelle. Sie erstellt ein neues Connection-Objekt und hängt das angegebene Recordset an.

Argumente

conn Die Verbindungszeichenfolge.

args Argumente für die Behandlungsroutine.

pRS Ein Recordset-Objekt.

msdfhdl.idl

Dies ist die Schnittstellendefinition für IDataFactoryHandler in der Datei msdfhdl.idl.

[
  uuid(D80DE8B3-0001-11d1-91E6-00C04FBBBFB3),
  version(1.0)
]
library MSDFHDL
{
    importlib("stdole32.tlb");
    importlib("stdole2.tlb");

    // TLib : Microsoft ActiveX Data Objects 2.0 Library
    // {00000200-0000-0010-8000-00AA006D2EA4}
    #ifdef IMPLIB
    importlib("implib\\x86\\release\\ado\\msado15.dll");
    #else
    importlib("msado20.dll");
    #endif

    [
      odl,
      uuid(D80DE8B5-0001-11d1-91E6-00C04FBBBFB3),
      version(1.0)
    ]
    interface IDataFactoryHandler : IUnknown
    {
HRESULT _stdcall GetRecordset(
        [in] BSTR conn,
        [in] BSTR args,
        [in] BSTR query,
        [out, retval] _Recordset **ppRS);

// DataFactory verwendet die ActiveConnection-Eigenschaft
// auf dem Recordset nach dem Aufrufen von Reconnect.
    HRESULT _stdcall Reconnect(
        [in] BSTR conn,
        [in] BSTR args,
        [in] _Recordset *pRS);
    };
};


ADOX-API-Verzeichnis

Dieser Abschnitt der ADO-Dokumentation enthält Themen zu allen ADO-Objekten, Auflistungen, Methoden, Ereignissen und Eigenschaften. Weitere Informationen finden Sie im Index unter dem entsprechenden Thema oder den folgenden Themen:

  • ADO-Objekte

  • ADO-Auflistungen

  • ADO-Methoden

  • ADO-Ereignisse

  • ADO-Eigenschaften


ADO-Objektmodell

Jedes der Connection-, Command-, Recordset- und Field-Objekte besitzt auch eine Properties-Auflistung.


ADO-Objekte

ADO-Objekte – Zusammenfassung

Objekt | Beschreibung
Command | Definiert einen bestimmten Befehl, den Sie gegen eine Datenquelle ausführen möchten.
Connection | Stellt eine geöffnete Verbindung mit einer Datenquelle dar.
DataControl (RDS) | Bindet ein Recordset-Objekt für die Datenabfrage an ein oder mehrere Steuerelemente (z. B. ein Textfeld-, eine Tabelle- oder ein Kombinationsfeld-Steuerelement), um die ADOR.Recordset-Daten in einer Webseite anzuzeigen.
DataFactory (RDS Server) | Implementiert Methoden, die Lese-/Schreibdatenzugriff auf bestimmte Datenquellen für clientbasierte Anwendungen zur Verfügung stellen.
DataSpace (RDS) | Erstellt clientbasierte Proxies für benutzerdefinierte Geschäftsobjekte, die sich auf der mittleren Ebene befinden.
Error | Enthält Einzelheiten zu Fehlern beim Datenzugriff, die sich auf eine einzelne Operation im Zusammenhang mit dem Provider beziehen.
Field | Stellt eine Spalte mit Daten eines gemeinsamen Datentyps dar.
Parameter | Stellt einen Parameter oder ein Argument dar, das mit einem Command-Objekt verbunden ist und auf einer parametrisierten Abfrage oder einer gespeicherten Prozedur basiert.
Property | Stellt ein dynamisches Merkmal eines ADO-Objekts dar, das vom Provider definiert wird.
RecordSet | Stellt die gesamte Gruppe von Datensätzen in einer Basistabelle oder die Ergebnisse eines ausgeführten Befehls dar. Das Recordset-Objekt bezieht sich immer nur auf einen einzelnen Datensatz innerhalb der Gruppe, der als aktueller Datensatz bezeichnet wird.

Die Beziehungen zwischen diesen Objekten sind im ADO-Objektmodell dargestellt.

Jedes Objekt kann in seiner dazugehörigen Auflistung enthalten sein. So kann z. B. ein Error-Objekt in einer Errors-Auflistung enthalten sein. Weitere Informationen erhalten Sie unter ADO-Auflistungen oder einem bestimmten Auflistungsthema.


Command-Objekt (ADO)

Command-Objekt

Ein Command-Objekt ist eine Definition eines bestimmten Befehls, der gegen eine Datenquelle ausgeführt werden soll.

Hinweise

Verwenden Sie ein Command-Objekt zum Abfragen einer Datenbank und zum Zurückgeben von Datensätzen in einem Recordset-Objekt sowie zum Ausführen einer Sammeloperation oder zum Ändern der Datenbankstruktur. Abhängig davon, welche Funktionalitäten der Provider bietet, lösen einige Command-Auflistungen,-Methoden oder -Eigenschaften eventuell einen Fehler aus, wenn auf sie verwiesen wird.

Mit den Auflistungen, Methoden und Eigenschaften eines Command-Objekts können Sie folgende Verfahren ausführen:

  • Definieren des ausführbaren Textes des Befehls (z. B. eine SQL-Anweisung) mit der CommandText-Eigenschaft.

  • Definieren von parametrisierten Abfragen oder Argumenten in Form gespeicherter Prozeduren mit Parameter-Objekten und der Parameters-Auflistung.

  • Ausführen eines Befehls und Zurückgeben eines Recordset-Objekts, sofern es für die Execute-Methode geeignet ist.

  • Angeben des Befehlstyps mit der CommandType-Eigenschaft vor dem Ausführen des Befehls zum Optimieren der Leistung.

  • Bestimmen, ob der Provider eine vorbereitete (oder kompilierte) Version des Befehls vor der Ausführung mit der Prepared-Eigenschaft speichert.

  • Festlegen der Anzahl der Sekunden, die ein Provider auf das Ausführen eines Befehls mit der CommandTimeout-Eigenschaft wartet.

  • Zuordnen einer geöffneten Verbindung zu einem Command-Objekt durch Festlegen seiner ActiveConnection-Eigenschaft.

  • Festlegen der Name-Eigenschaft zum Kennzeichnen des Command-Objekts als Methode des zugeordneten Connection-Objekts.

  • Übergeben eines Command-Objekts an die Source-Eigenschaft eines Recordset zum Anfordern von Daten.

    Anmerkung Um eine Abfrage ohne Verwendung eines Command-Objekts auszuführen, übergeben Sie eine Abfragezeichenfolge an die Execute-Methode eines Connection-Objekts oder an die Open-Methode eines Recordset-Objekts. Wenn der Befehlstext bestehen bleiben und erneut ausgeführt werden soll oder wenn Abfrageparameter verwendet werden sollen, wird jedoch ein Command-Objekt benötigt.

Um ein Command-Objekt unabhängig von einem vorher definierten Connection-Objekt zu erstellen, legen Sie seine ActiveConnection-Eigenschaft auf eine gültige Verbindungszeichenfolge fest. ADO erstellt zwar dennoch ein Connection-Objekt, weist dieses Objekt aber keiner Objektvariablen zu. Wenn Sie jedoch mehrere Command-Objekte derselben Verbindung zuordnen, sollten Sie explizit ein Connection-Objekt erstellen und öffnen. Dies weist das Connection-Objekt einer Objektvariablen zu. Falls Sie die ActiveConnection-Eigenschaft der Command-Objekte nicht auf diese Objektvariable festlegen, erstellt ADO ein neues Connection-Objekt für jedes Command-Objekt, selbst wenn Sie dieselbe Verbindungszeichenfolge verwenden.

Wenn Sie ein Command-Objekt ausführen möchten, rufen Sie es lediglich durch seine Name-Eigenschaft in dem zugeordneten Connection-Objekt auf. Die ActiveConnection-Eigenschaft des Command-Objekts muss auf das Connection-Objekt gesetzt sein. Besitzt das Command-Objekt Parameter, übergeben Sie die Werte für die Parameter als Argumente an die Methode.

Wenn zwei oder mehr Command-Objekte auf derselben Verbindung ausgeführt werden und eines davon eine gespeicherte Prozedur mit Ausgabeparameter ist, tritt ein Fehler auf. Verwenden Sie, um jedes Command-Objekt ausführen zu können, separate Verbindungen, oder trennen Sie alle anderen Command-Objekte von der Verbindung.


Connection-Objekt (ADO)

Connection-Objekt

Ein Connection-Objekt stellt eine geöffnete Verbindung zu einer Datenquelle dar.

Hinweise

Ein Connection-Objekt stellt eine einmalige Sitzung mit einer Datenquelle dar. Bei Client/Server-Datenbanksystemen kann dies einer tatsächlichen Netzwerkverbindung zum Server entsprechen. Abhängig davon, welche Funktionalitäten der Provider unterstützt, stehen einige Auflistungen, Methoden oder Eigenschaften eines Connection-Objekts möglicherweise nicht zur Verfügung.

Mit den Auflistungen, Methoden und Eigenschaften eines Connection-Objekts können Sie folgende Verfahren ausführen:

  • Konfigurieren der Verbindung, bevor Sie sie mit den ConnectionString-, ConnectionTimeout- und Mode-Eigenschaften öffnen.

  • Festlegen der CursorLocation-Eigenschaft zum Aufrufen des Microsoft Client Cursor Provider, der Stapelaktualisierungen unterstützt.

  • Einrichten der Standarddatenbank für die Verbindung mit der DefaultDatabase-Eigenschaft.

  • Festlegen der Isolierungsebene für die Transaktionen, die in der Verbindung mit der IsolationLevel-Eigenschaft geöffnet sind.

  • Festlegen eines OLE DB-Providers mit der Provider-Eigenschaft.

  • Einrichten und späteres Beenden der physischen Verbindung zur Datenquelle mit den Open- und Close-Methoden.

  • Ausführen eines Befehls in der Verbindung mit der Execute-Methode und Konfigurieren der Ausführung mit der CommandTimeout-Eigenschaft.

  • Verwalten von Transaktionen in der geöffneten Verbindung, einschließlich geschachtelter Transaktionen. sofern der Provider diese unterstützt, mit den Methoden BeginTrans, CommitTrans und RollbackTrans und der Attributes-Eigenschaft.

  • Untersuchen von Fehlern, die von der Datenquelle mit der Errors-Auflistung zurückgegeben werden.

  • Lesen der Version aus der ADO-Implementierung, die mit der Version-Eigenschaft verwendet wird.

  • Anfordern von Schemainformationen über die Datenbank mit der OpenSchema-Methode.

    Anmerkung Um eine Abfrage ohne Verwendung eines Command-Objekts auszuführen, übergeben Sie eine Abfragezeichenfolge an die Execute-Methode eines Connection-Objekts. Wenn der Befehlstext bestehen bleiben und erneut ausgeführt werden soll oder wenn Abfrageparameter verwendet werden sollen, wird jedoch ein Command-Objekt benötigt.

Sie können die Connection-Objekte unabhängig von jedem anderen vorher definierten Objekt erstellen.

Anmerkung Sie können Befehle oder gespeicherte Prozeduren ausführen, als handele es sich um Methoden des Connection-Objekts.

Um einen Befehl auszuführen, geben Sie dem Befehl mit Hilfe der Name-Eigenschaft des Command-Objekts einen Namen. Setzen Sie die ActiveConnection-Eigenschaft des Command-Objekts auf die gewünschte Verbindung. Geben Sie dann eine Anweisung aus, in der der Befehlsname verwendet wird, als handele es sich um eine Methode des Connection-Objekts, gefolgt von beliebigen Parametern und gefolgt von einem Recordset-Objekt, wenn Zeilen zurückgegeben werden. Setzen Sie die Recordset-Eigenschaften, um das resultierende Recordset anzupassen. Beispiel:

Dim cnn  As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim rst As New ADODB.Recordset
...
cnn.Open "..."
cmd.Name = "yourCommandName"
cmd.ActiveConnection = cnn
...
'Ihr Befehlsname, Parameter und ein optionales Recordset.
cnn.yourCommandName "parameter", rst

Um eine gespeicherte Prozedur auszuführen, geben Sie eine Anweisung aus, in der der Name der gespeicherten Prozedur verwendet wird, als handele es sich um eine Methode des Connection-Objekts, gefolgt von beliebigen Parametern. ADO schlägt Parametertypen vor. Beispiel:

Dim cnn  As New ADODB.Connection
...
'Name der gespeicherten Prozedur und Parameter.
cnn.sp_yourStoredProcedureName "parameter"


DataControl-Objekt (RDS)

Das RDS.DataControl-Objekt bindet ein Recordset-Objekt für die Datenabfrage an ein oder mehrere Steuerelemente (z. B. ein Textfeld-, ein Tabelle- oder ein Kombinationsfeld-Steuerelement), um die ADOR.Recordset-Daten in einer Webseite anzuzeigen.

Syntax

<OBJECT CLASSID="clsid:BD96C556-65A3-11D0-983A-00C04FC29E33" ID="DatenSteuerelement"

<PARAM NAME="Connect" VALUE="DSN=DSNName;UID=Benutzer;PWD=Kennwort;">

<PARAM NAME="Server" VALUE="http://einWebserver">

<PARAM NAME="SQL" VALUE="AbfrageText">

</OBJECT>

Hinweise

Der Klassenbezeichner (CLSID) für das RDS.DataControl-Objekt ist BD96C556-65A3-11D0-983A-00C04FC29E33.

Für ein Basisszenario müssen Sie lediglich die SQL-, Connect- und Server-Eigenschaften des RDS.DataControl-Objekts festlegen. Hierdurch wird automatisch das standardmäßige Geschäftsobjekt, RDSServer.DataFactory, aufgerufen.

Alle Eigenschaften in RDS.DataControl sind optional, da benutzerdefinierte Geschäftsobjekte deren Funktionalitäten ersetzen können.

Verwenden Sie ein RDS.DataControl-Objekt, um die Ergebnisse einer einzelnen Abfrage mit einem oder mehreren grafischen Steuerelementen zu verknüpfen. Angenommen, Sie codieren eine Abfrage, mit der Kundendaten wie z. B. Name, Wohnort, Geburtsort, Alter und Kundenprioritätsstatus angefordert werden. Mit Hilfe eines einzelnen RDS.DataControl-Objekts können Sie den Namen, das Alter und den Wohnort des Kunden in drei verschiedenen Textfeldern, den Kundenprioritätsstatus in einem Kontrollkästchen und die gesamten Daten in einem Tabellen-Steuerelement (Grid) anzeigen.

Verwenden Sie verschiedene RDS.DataControl-Objekte, um die Ergebnisse mehrerer Abfragen mit unterschiedlichen grafischen Steuerelementen zu verknüpfen. Angenommen, Sie verwenden eine Abfrage zum Anfordern von Kundeninformationen und eine zweite Abfrage zum Anfordern von Informationen über die Waren, die dieser Kunde gekauft hat. Sie möchten die Ergebnisse der ersten Abfrage in drei Textfeldern und einem Kontrollkästchen und die Ergebnisse der zweiten Abfrage in einem Tabellen-Steuerelement anzeigen. Wenn Sie das Standardgeschäftsobjekt (RDSServer.DataFactory) verwenden, müssen Sie folgende Verfahren ausführen:

  • Hinzufügen von zwei RDS.DataControl-Objekten zu Ihrer Webseite.

  • Schreiben von zwei Abfragen, eine für jede SQL-Eigenschaft der beiden RDS.DataControl-Objekte. Das eine RDS.DataControl-Objekt enthält eine SQL-Abfrage, mit der Kundeninformationen angefordert werden. Mit der zweiten SQL-Abfrage wird eine Liste der Waren angefordert, die der Kunde gekauft hat.

  • Geben Sie in jedem OBJECT-Tag der gebundenen Steuerelemente den DATAFLD-Wert an, um die Werte für die Daten festzulegen, die in den einzelnen grafischen Steuerelementen angezeigt werden sollen.

Die Zahl der RDS.DataControl-Objekte, die Sie über OBJECT-Tags in eine einzelne Webseite einbetten können, ist nicht beschränkt.

Verwenden Sie beim Definieren des RDS.DataControl-Objekts in einer Webseite Height- und Width-Werte ungleich Null, wie beispielsweise 1 (um den Einschluss zusätzlichen Platzes zu verhindern).

Clientkomponenten für Remote Data Service sind bereits in Internet Explorer 4.0 enthalten. Aus diesem Grund ist es nicht erforderlich, dem OBJECT-Tag des RDS.DataControl-Objekts einen CODEBASE-Parameter hinzuzufügen.

Getestete Steuerelemente

In der folgenden Tabelle sind die datenbezogenen Steuerelemente aufgeführt, deren Zusammenwirken mit dem RDS.DataControl-Objekt sowie den zugeordneten, clientbasierten Komponenten getestet wurde. Andere Steuerelemente können möglicherweise auch mit Remote Data Service verwendet werden. Sie wurden jedoch nicht getestet.

Steuerelementname | Dateiname | Klassenbezeichner (CLSID)
SSDBGrid | SSDATB32.ocx (Sheridan) | AC05DC80-7DF1-11d0-839E-00A024A94B3A

Beim Verwenden von Internet Explorer 4.0 können Datenbindungen unter Verwendung von HTML-Steuerelementen und ActiveX®-Steuerelementen nur dann durchgeführt werden, wenn diese als Steuerelemente für das Apartment-Modell gekennzeichnet sind.

Die aufgeführten Steuerelemente werden nicht mit Remote Data Service vertrieben, können jedoch als Teil von Microsoft® Visual Basic®, Enterprise Edition, oder bei Sheridan Systems Inc. erworben werden.

Wichtig Jegliche Weitergabe der ActiveX-Steuerelemente, die als Teil der Remote Data Service-Beispiele bereitgestellt werden, ist nicht erlaubt. Es handelt sich hierbei um Teile der Beispielanwendungen, deren Weiterleitung an Dritte auf jeden Fall unterbleiben muss.

Benutzer von Microsoft Visual Basic Das RDS.DataControl-Objekt wird nur in webbasierten Anwendungen verwendet. In einer Clientanwendung von Visual Basic wird es nicht benötigt.


DataFactory-Objekt (RDSServer)

Dieses serverbasierte Standardgeschäftsobjekt implementiert Methoden, die Lese-/Schreibdatenzugriff auf bestimmte Datenquellen für clientbasierte Anwendungen zur Verfügung stellen.

Hinweise

Bei dem RDSServer.DataFactory-Objekt handelt es sich um ein serverbasiertes Automatisierungsobjekt, das Clientanforderungen empfängt. In einer Internetimplementierung befindet es sich auf einem Webserver und wird durch die ADISAPI-Komponente instantiiert. Das RDSServer.DataFactory-Objekt stellt Lese- und Schreibzugriff auf bestimmte Datenquellen zur Verfügung, enthält jedoch keine Logik für die Gültigkeitsüberprüfung oder für Geschäftsregeln.

Wenn Sie eine Methode verwenden, die sowohl in RDSServer.DataFactory- als auch in RDS.DataControl-Objekten zur Verfügung steht, wird durch Remote Data Service standardmäßig die RDS.DataControl-Version verwendet. Als Voreinstellung wird von einem grundlegenden Programmierszenario ausgegangen, wobei RDSServer.DataFactory als allgemeines serverbasiertes Geschäftsobjekt fungiert.

Wenn in der Webanwendung eine aufgabenspezifische und serverbasierte Datenverarbeitung durchgeführt werden soll, können Sie das RDSServer.DataFactory-Objekt durch ein benutzerdefiniertes Geschäftsobjekt ersetzen.

Sie können serverbasierte Geschäftsobjekte erstellen, die die RDSServer.DataFactory-Methoden, wie z. B. Query und CreateRecordset, aufrufen. Dies ist hilfreich, wenn Sie den Geschäftsobjekten zwar Funktionalitäten hinzufügen, den Vorteil der vorhandenen Technologien von Remote Data Service jedoch auch nutzen möchten.

Der Klassenbezeichner für das RDSServer.DataFactory-Objekt ist 9381D8F5-0288-11D0-9501-00AA00B911A5.


DataSpace-Objekt (RDS)

Das RDS.DataSpace-Objekt erstellt clientbasierte Proxies für benutzerdefinierte Geschäftsobjekte, die sich auf der mittleren Ebene befinden.

Hinweise

Remote Data Service benötigt Proxies für Geschäftsobjekte, damit clientbasierte Komponenten mit Geschäftsobjekten kommunizieren können, die sich auf der mittleren Ebene befinden. Proxies vereinfachen das Packen, Auspacken und Transportieren (Marshaling) der Recordset-Daten einer Anwendung über Prozess- oder Computergrenzen.

Remote Data Service verwendet die CreateObject-Methode des RDS.DataSpace-Objekts zum Erstellen von Proxies für Geschäftsobjekte. Der Proxy für das Geschäftsobjekt wird dynamisch erstellt, sobald eine Instanz für das Gegenstück jenes Geschäftsobjekts auf der mittleren Ebene erstellt wird. Remote Data Service unterstützt die folgenden Protokolle: HTTP, HTTPS (HTTP Secure Sockets), DCOM sowie prozessinterne Protokolle. (Die Clientkomponenten und das Geschäftsobjekt befinden sich auf demselben Computer.)

Der Klassenbezeichner für das RDS.DataSpace-Objekt ist BD96C556-65A3-11D0-983A-00C04FC29E36.


Error-Objekt (ADO)

Error-Objekt

Ein Error-Objekt enthält Einzelheiten zu Fehlern beim Datenzugriff, die sich auf eine einzelne Operation im Zusammenhang mit dem Provider beziehen.

Hinweise

Jede Operation, an der ADO-Objekte beteiligt sind, kann einen oder mehrere Providerfehler auslösen. Sobald ein Fehler auftritt, werden ein oder mehrere Error-Objekte in die Errors-Auflistung des Connection-Objekts übernommen. Wenn eine andere ADO-Operation einen Fehler auslöst, wird die Errors-Auflistung gelöscht, und der neue Satz von Error-Objekten wird in die Errors-Auflistung aufgenommen.

Anmerkung Jedes Error-Objekt stellt einen bestimmten Providerfehler, aber keinen ADO-Fehler dar. ADO-Fehler werden über die Laufzeitfehlerbehandlung bearbeitet. In Microsoft Visual Basic beispielsweise löst das Auftreten eines ADO-Fehlers ein On Error-Ereignis aus, und der Fehler wird im Err-Objekt angezeigt. Eine vollständige Liste der ADO-Fehler finden Sie unter ADO-Fehlercodes.

Sie können folgende Eigenschaften eines Error-Objekts lesen, um u. a. folgende Einzelheiten zu jedem Fehler zu erhalten:

  • Die Description-Eigenschaft, die den Text der Fehlermeldung enthält.

  • Die Number-Eigenschaft, die den ganzzahligen Long-Wert der Fehlerkonstante enthält.

  • Die Source-Eigenschaft, die das Objekt kennzeichnet, das den Fehler ausgelöst hat. Diese Eigenschaft ist besonders nützlich, wenn mehrere Error-Objekte in der Errors-Auflistung vorhanden sind, nachdem eine Anforderung an die Datenquelle geschickt wurde.

  • Die SQLState- und NativeError-Eigenschaften, die Informationen aus SQL-Datenquellen liefern.

Wenn ein Providerfehler auftritt, wird er in die Errors-Auflistung des Connection-Objekts aufgenommen. ADO unterstützt die Rückgabe mehrerer Fehler durch eine einzige ADO-Operation und bietet so die Möglichkeit, providerspezifische Fehlerinformationen zu liefern. Um diese vielfältigen Fehlerinformationen in einer Fehlerbehandlungsroutine anzufordern, verwenden Sie die geeigneten Features zum Auffangen von Fehlern in der Sprache oder Umgebung, in der Sie arbeiten. Verwenden Sie anschließend geschachtelte Schleifen, um die Eigenschaften der einzelnen Error-Objekte in der Errors-Auflistung auszuwerten.

Microsoft Visual Basic und VBScript Wenn kein gültiges Connection-Objekt vorhanden ist, ist es erforderlich, die Fehlerinformationen aus dem Err-Objekt abzurufen.

ADO löscht (ebenso wie Provider) das OLE Error Info-Objekt, bevor ein Aufruf durchgeführt wird, der möglicherweise einen neuen Providerfehler auslöst. Die Errors-Auflistung im Connection-Objekt wird dennoch gelöscht und nur aufgefüllt, wenn der Provider einen neuen Fehler auslöst oder die Clear-Methode aufgerufen wird.

Einige Eigenschaften und Methoden geben Warnmeldungen zurück, die als Error-Objekte in der Errors-Auflistung angezeigt werden, ohne die Programmausführung jedoch anzuhalten. Bevor Sie die Methoden Resync, UpdateBatch, oder die CancelBatch-Methode bei einem Recordset-Objekt aufrufen, die Open-Methode bei einem Connection-Objekt aufrufen oder die Filter-Eigenschaft bei einem Recordset-Objekt aufrufen, rufen Sie die Clear-Methode in der Errors-Auflistung auf. Dadurch können Sie die Count-Eigenschaft der Errors-Auflistung lesen, um nach zurückgegebenen Warnmeldungen zu suchen.


Field-Objekt (ADO)

Field-Objekt

Ein Field-Objekt stellt eine Spalte mit Daten eines gemeinsamen Datentyps dar.

Hinweise

Ein Recordset-Objekt besitzt eine Fields-Auflistung, die aus Field-Objekten besteht. Jedes Field-Objekt entspricht einer Spalte im Recordset-Objekt. Mit der Value-Eigenschaft der Field-Objekte werden Daten für den aktuellen Datensatz festgelegt oder zurückgegeben. Je nach den Funktionalitäten des Providers sind einige Auflistungen, Methoden oder Eigenschaften eines Field-Objekts unter Umständen nicht verfügbar.

Mit den Auflistungen, Methoden und Eigenschaften eines Field-Objekts können Sie folgende Verfahren ausführen:

  • Zurückgeben eines Feldnamens mit der Name-Eigenschaft.

  • Anzeigen oder Ändern der Daten im Feld mit der Value-Eigenschaft.

  • Zurückgeben der Grundmerkmale eines Feldes mit den Type-, Precision- und NumericScale-Eigenschaften.

  • Zurückgeben der deklarierten Größe eines Feldes mit der DefinedSize-Eigenschaft.

  • Zurückgeben des tatsächlichen Datenumfangs in einem gegebenen Feld mit der ActualSize-Eigenschaft.

  • Bestimmen, welche Funktionalitäten für ein gegebenes Feld unterstützt werden. Verwenden Sie dafür die Attributes-Eigenschaft und die Properties-Auflistung.

  • Ändern der Werte von Feldern, die lange Binärdaten oder lange Zeichendaten enthalten, mit den AppendChunk- und GetChunk-Methoden.

  • Sofern der Provider Stapelaktualisierungen unterstützt, Auflösen von Widersprüchen zwischen Feldwerten während der Stapelaktualisierung mit den OriginalValue- und UnterlyingValue-Eigenschaften.

Sämtliche Eigenschaften von Metadaten (Name, Type, DefinedSize, Precision und NumericScale) stehen vor dem Öffnen des Recordset des Field-Objekts zur Verfügung. Das Festlegen dieser Eigenschaften ist hilfreich beim dynamischen Erstellen von Formularen.


Parameter-Objekt (ADO)

Parameter-Objekt

Ein Parameter-Objekt stellt einen Parameter oder ein Argument dar, das mit einem Command-Objekt verbunden ist und auf einer parametrisierten Abfrage oder einer gespeicherten Prozedur basiert.

Hinweise

Viele Provider unterstützen parametrisierte Befehle. Hierbei handelt es sich um Befehle, bei denen die gewünschte Aktion einmal definiert wurde, wobei jedoch Einzelheiten des Befehls mit Hilfe von Variablen (oder Parametern) geändert werden können. Beispielsweise kann eine SQL SELECT-Anweisung einen Parameter zum Definieren der entsprechenden Kriterien eines WHERE-Abschnitts verwenden. Eine andere Anweisung könnte den Spaltennamen für einen SORT BY-Abschnitt als Parameter definieren.

Parameter-Objekte stellen Parameter dar, die mit parametrisierten Abfragen oder den Eingabe-/Ausgabe-Argumenten und den Rückgabewerten von gespeicherten Prozeduren verbunden sind. Abhängig davon, welche Funktionalitäten der Provider bietet, sind einige Auflistungen, Methoden oder Eigenschaften eines Parameter-Objekts möglicherweise nicht verfügbar.

Mit den Auflistungen, Methoden und Eigenschaften eines Parameter-Objekts können Sie folgende Verfahren ausführen:

  • Festlegen oder Zurückgeben eines Parameternamens mit der Name-Eigenschaft.

  • Festlegen oder Zurückgeben eines Parameterwertes mit der Value-Eigenschaft.

  • Festlegen oder Zurückgeben der Parametermerkmale mit den Eigenschaften Attributes, Direction, Precision, NumericScale, Size und Type.

  • Übergeben langer Binär- oder Zeichendaten an einen Parameter mit der AppendChunk-Methode.

Wenn Sie die Namen und Eigenschaften der Parameter kennen, die mit der gespeicherten Prozedur oder der aufzurufenden parametrisierten Abfrage verbunden sind, können Sie die CreateParameter-Methode verwenden, um Parameter-Objekte mit den entsprechenden Eigenschaftseinstellungen zu erstellen. Weiterhin können Sie die Append-Methode verwenden, um die Objekte der Parameters-Auflistung hinzuzufügen. Auf diese Weise können Sie Parameterwerte festlegen und zurückgeben, ohne die Refresh-Methode in der Parameters-Auflistung aufrufen zu müssen, um in einem ressourcenintensiven Vorgang die Parameterinformationen vom Provider abzurufen.


Property-Objekt (ADO)

Property-Objekt

Ein Property-Objekt stellt ein dynamisches Merkmal eines ADO-Objekts dar, das vom Provider definiert wird.

Hinweise

ADO-Objekte besitzen zwei Eigenschaftstypen: integrierte und dynamische.

Integrierte Eigenschaften sind in ADO implementiert und stehen unter Verwendung der MyObject.Property-Syntax sofort für jedes neue Objekt zur Verfügung. Sie werden in der Properties-Auflistung eines Objekts jedoch nicht als Property-Objekte angezeigt. Daher können Sie zwar ihre Werte ändern, nicht aber ihre Merkmale.

Dynamische Eigenschaften werden durch den zugrunde liegenden Datenprovider definiert. Sie werden in der Properties-Auflistung für das entsprechende ADO-Objekt angezeigt. Eine spezifische Providereigenschaft kann z. B. anzeigen, ob ein Recordset-Objekt Transaktionen oder Aktualisierungen unterstützt. Diese zusätzlichen Eigenschaften werden als Property-Objekte in der Properties-Auflistung dieses Recordset-Objekts angezeigt. Auf dynamische Eigenschaften kann nur durch die Auflistung unter Verwendung der folgenden Syntax verwiesen werden: MyObject.Properties(0) oder MyObject.Properties("Name").

Sie können eine Eigenschaft nicht löschen.

Ein dynamisches Property-Objekt besitzt vier eigene, integrierte Eigenschaften:

  • Die Name-Eigenschaft ist eine Zeichenfolge, die die Eigenschaft kennzeichnet.

  • Die Type-Eigenschaft ist eine Ganzzahl, die den Datentyp der Eigenschaft festlegt.

  • Die Value-Eigenschaft ist ein Wert vom Typ Variant, der die Eigenschaftseinstellung enthält.

  • Die Attributes-Eigenschaft ist ein Wert vom Typ Long, der charakteristische Merkmale der providerspezifischen Eigenschaft angibt.


Recordset-Objekt (ADO)

Recordset-Objekt

Ein Recordset-Objekt stellt die gesamte Gruppe von Datensätzen in einer Basistabelle oder die Ergebnisse eines ausgeführten Befehls dar. Das Recordset-Objekt bezieht sich immer nur auf einen einzelnen Datensatz innerhalb der Gruppe, der als aktueller Datensatz bezeichnet wird.

Hinweise

Verwenden Sie die Recordset-Objekte, um Daten eines Providers zu ändern. Wenn Sie ADO verwenden, ändern Sie Daten fast ausschließlich mit Hilfe der Recordset-Objekte. Alle Recordset-Objekte bestehen aus Datensätzen (Zeilen) und Feldern (Spalten). Abhängig davon, welche Funktionalitäten der Provider unterstützt, stehen einige Recordset-Methoden oder -Eigenschaften möglicherweise nicht zur Verfügung.

ADOR.Recordset und ADODB.Recordset sind Programm-IDs, die zum Erstellen eines Recordset-Objekts verwendet werden können. Das Verhalten der erstellten Recordset-Objekte ist identisch, unabhängig von der Programm-ID. ADOR.Recordset wird mit Microsoft® Internet Explorer installiert. Die Installation von ADODB.Recordset erfolgt mit ADO. Das Verhalten eines Recordset-Objekts wird durch seine Umgebung beeinflusst (d. h. Client, Server, Internet Explorer usw.). Unterschiede bei Eigenschaften, Methoden und Ereignissen werden in den entsprechenden Hilfethemen erläutert.

Es gibt es vier unterschiedliche in ADO definierte Cursortypen:

  • Dynamischer Cursor – Er ermöglicht das Anzeigen von Zusätzen, Änderungen und Löschungen durch andere Benutzer; ermöglicht alle Arten von Bewegungen im Recordset-Objekt, die nicht auf Lesezeichen basieren; und lässt Lesezeichen zu, falls der Provider diese unterstützt.

  • Cursor vom Typ Schlüsselgruppe –Sein Verhalten ähnelt dem eines dynamischen Cursors, mit dem Unterschied, dass Sie damit keine von anderen Benutzern hinzugefügten Datensätze anzeigen lassen können und den Zugriff auf von anderen Benutzern gelöschte Datensätze verhindert wird. Von anderen Benutzern durchgeführte Datenänderungen bleiben weiterhin sichtbar. Dieser Cursor bietet immer eine Lesezeichenunterstützung und ermöglicht daher alle Arten von Bewegungen im Recordset-Objekt.

  • Statischer Cursor – Dieser Cursor stellt eine statische Kopie einer Gruppe von Datensätzen zur Verfügung, mit der Daten gesucht oder Berichte erzeugt werden können. Er lässt immer Lesezeichen und daher alle Arten von Bewegungen im Recordset-Objekt zu. Zusätze, Änderungen oder Löschvorgänge anderer Benutzer sind nicht sichtbar. Wenn Sie ein clientbasiertes (ADOR) Recordset-Objekt öffnen, ist nur dieser Cursortyp erlaubt.

  • Cursor von Typ Vorwärts – verhält sich wie ein statischer Cursor mit dem Unterschied, dass er Blättern durch Datensätze nur in Vorwärtsrichtung ermöglicht. Dies verbessert die Leistung in Situationen, in denen Sie nur einen einzigen Durchlauf durch ein Recordset durchführen müssen.

Legen Sie die CursorType-Eigenschaft vor dem Öffnen des Recordset fest, um den Cursortyp zu wählen, oder übergeben Sie ein CursorType-Argument mit der Open-Methode. Manche Provider unterstützen nicht alle Cursortypen. Überprüfen Sie hierzu die Dokumentation Ihres Providers. Wenn Sie keinen bestimmten Cursortyp angeben, öffnet ADO standardmäßig einen Cursor vom Typ Vorwärts.

Ist die CursorLocation-Eigenschaft auf adUseClient festgelegt, um ein Recordset-Objekt zu öffnen, dann ist die zugrunde liegende UnderlyingValue-Eigenschaft auf den Field-Objekten im zurückgebenen Recordset-Objekt nicht verfügbar. Bei einigen Providern (wie z. B. Microsoft ODBC Provider für OLE DB in Verbindung mit Microsoft SQL Server) können Sie Recordset-Objekte unabhängig von einem zuvor definierten Connection-Objekt erstellen, indem Sie eine Verbindungszeichenfolge mit der Open-Methode übergeben. ADO erstellt zwar dennoch ein Connection-Objekt, weist dieses Objekt aber keiner Objektvariablen zu. Wenn Sie jedoch mehrere Recordset-Objekte über dieselbe Verbindung öffnen, sollten Sie explizit ein Connection-Objekt erstellen und öffnen. Dies weist dem Connection-Objekt eine Objektvariable zu. Falls Sie diese Objektvariable beim Öffnen der Recordset-Objekte nicht verwenden, erstellt ADO ein neues Connection-Objekt für jedes neue Recordset-Objekt, selbst wenn Sie dieselbe Verbindungszeichenfolge übergeben.

Sie können so viele Recordset-Objekte erstellen wie benötigt werden.

Wenn Sie ein Recordset-Objekt öffnen, wird der aktuelle Datensatz auf den ersten Datensatz gesetzt (wenn überhaupt) und die Eigenschaften BOF und EOF werden auf False gesetzt. Wenn keine Datensätze vorhanden sind, erhalten die Eigenschaftseinstellungen für BOF und EOF den Wert True.

Sie können die Methoden MoveFirst, MoveLast, MoveNext und MovePrevious sowie Move und die Eigenschaften AbsolutePosition, AbsolutePage und Filter dazu verwenden, den Zeiger auf den aktuellen Datensatz neu zu platzieren, sofern der Provider die jeweilige Funktionalität unterstützt. Ausschließlich vorwärts gerichtete Recordset-Objekte unterstützen lediglich die MoveNext-Methode. Wenn Sie die Move-Methoden zum Einsehen der einzelnen Datensätze (oder zum Aufzählen des Recordset-Objekts) verwenden, können Sie mit den BOF- und EOF-Eigenschaften feststellen, ob Sie sich über den Anfang oder das Ende des Recordset-Objekts hinaus bewegt haben.

Die Recordset-Objekte unterstützen zwei Aktualisierungstypen: sofortige Aktualisierung und Stapelaktualisierung. Beim sofortigen Aktualisieren werden alle Änderungen an den Daten sofort in die zugrunde liegende Datenquelle geschrieben, sobald Sie die Update-Methode aufrufen. Sie können auch Arrays mit Werten als Parameter der AddNew- und Update-Methoden übergeben und gleichzeitig mehrere Felder in einem Datensatz aktualisieren.

Falls ein Provider die Stapelaktualisierung unterstützt, kann in dem Zwischenspeicher des Providers mehr als ein Datensatz gespeichert werden, um diese Datensätze dann mit der UpdateBatch-Methode in einem einzigen Aufruf an die Datenbank zu senden. Dies gilt für Änderungen, die mit den Methoden AddNew, Update und Delete vorgenommen wurden. Nachdem Sie die UpdateBatch-Methode aufgerufen haben, können Sie mit Hilfe der Status-Eigenschaft überprüfen, ob zu lösende Datenkonflikte vorliegen.

Anmerkung Um eine Abfrage ohne Verwendung eines Command-Objekts auszuführen, übergeben Sie eine Abfragezeichenfolge an die Open-Methode eines Recordset-Objekts. Wenn der Befehlstext bestehen bleiben und erneut ausgeführt werden soll oder wenn Abfrageparameter verwendet werden sollen, wird jedoch ein Command-Objekt benötigt.


ADO-Auflistungen

ADO-Auflistungen - Zusammenfassung

Auflistung | Beschreibung
Errors | Enthält sämtliche Error-Objekte, die als Reaktion auf einen einzelnen Fehler erstellt wurden, an dem der Provider beteiligt war.
Fields | Enthält alle Field-Objekte eines Recordset-Objekts.
Parameters | Enthält alle Parameter-Objekte eines Command-Objekts.
Properties | Enthält alle Property-Objekte für eine bestimmte Instanz eines Objekts.


Errors-Auflistung (ADO)

Errors-Auflistung

Enthält sämtliche Error-Objekte, die als Reaktion auf einen einzelnen Fehler erstellt wurden, an dem der Provider beteiligt war.

Hinweise

Jede Operation, an der ADO-Objekte beteiligt sind, kann einen oder mehrere Providerfehler auslösen. Sobald ein Fehler auftritt, können ein oder mehrere Error-Objekte in die Errors-Auflistung des Connection-Objekts übernommen werden. Wenn eine andere ADO-Operation einen Fehler auslöst, wird die Errors-Auflistung gelöscht, und der neue Satz von Error-Objekten kann in der Errors-Auflistung platziert werden.

Jedes Error-Objekt stellt einen bestimmten Providerfehler, aber keinen ADO-Fehler dar. ADO-Fehler werden über die Laufzeitfehlerbehandlung bearbeitet. In Microsoft Visual Basic beispielsweise löst das Auftreten eines ADO-Fehlers ein On Error-Ereignis aus, und der Fehler wird im Err-Objekt angezeigt.

ADO-Operationen, die keinen Fehler auslösen, haben keinen Einfluss auf die Errors-Auflistung. Verwenden Sie die Clear-Methode, um die Errors-Auflistung manuell zu löschen.

Der Satz von Errors-Objekten in der Errors-Auflistung beschreibt sämtliche Fehler, die als Reaktion auf eine einzelne Anweisung aufgetreten sind. Durch das Aufzählen der speziellen Fehler in der Errors-Auflistung können Ihre Fehlerbehandlungsroutinen die Ursache und Herkunft eines Fehlers genauer bestimmen und geeignete Schritte für dessen Behebung einleiten.

Einige Eigenschaften und Methoden geben Warnmeldungen zurück, die als Error-Objekte in der Errors-Auflistung angezeigt werden, ohne die Programmausführung jedoch anzuhalten. Bevor Sie die Methoden Resync, UpdateBatch, oder die CancelBatch-Methode bei einem Recordset-Objekt aufrufen, die Open-Methode bei einem Connection-Objekt aufrufen oder die Filter-Eigenschaft bei einem Recordset-Objekt aufrufen, rufen Sie die Clear-Methode in der Errors-Auflistung auf. Dadurch können Sie die Count-Eigenschaft der Errors-Auflistung lesen, um nach zurückgegebenen Warnmeldungen zu suchen.

Anmerkung Eine ausführliche Erklärung darüber, wie eine einzelne ADO-Operation mehrere Fehler auslösen kann, finden Sie unter dem Hilfethema zum Error-Objekt.


Fields-Auflistung (ADO)

Fields-Auflistung

Enthält alle Field-Objekte eines Recordset-Objekts.

Hinweise

Ein Recordset-Objekt besitzt eine Fields-Auflistung, die aus den Field-Objekten besteht. Jedes Field-Objekt entspricht einer Spalte im Recordset-Objekt. Sie können die Fields-Auflistung vor dem Öffnen des Recordset-Objekts durch Aufrufen der Refresh-Methode in der Auflistung auffüllen.

Anmerkung Eine ausführliche Erklärung zum Verwenden der Field-Objekte finden Sie unter dem Hilfethema zum Field-Objekt.


Parameters-Auflistung (ADO)

Parameters-Auflistung

Enthält alle Parameter-Objekte eines Command-Objekts.

Hinweise

Ein Command-Objekt besitzt eine Parameters-Auflistung, die aus den Parameter-Objekten besteht.

Durch Verwenden der Refresh-Methode in einer Parameters-Auflistung eines Command-Objekts werden die Parameterinformationen des Providers für die im Command-Objekt festgelegte gespeicherte Prozedur oder parametrisierte Abfrage gelesen. Einige Provider unterstützen keine parametrisierten Abfragen oder Aufrufe gespeicherter Prozeduren. Beim Verwenden eines solchen Providers gibt das Aufrufen der Refresh-Methode in der Parameters-Auflistung einen Fehler zurück.

Wenn Sie keine eigenen Parameter-Objekte definiert haben und auf die Parameters-Auflistung zugreifen, bevor Sie die Refresh-Methode aufrufen, ruft ADO automatisch die Methode auf und füllt die Auflistung selbst auf.

Sie können die Aufrufe des Providers zum Zweck der Leistungsverbesserung auf ein Minimum reduzieren, wenn Sie die Eigenschaften der Parameter kennen, die mit der aufzurufenden gespeicherten Prozedur oder parametrisierten Abfrage verbunden sind. Verwenden Sie die CreateParameter-Methode, um Parameter-Objekte mit den entsprechenden Eigenschaftseinstellungen zu erstellen. Verwenden Sie die Append -Methode, um sie der Parameters-Auflistung hinzuzufügen. Hiermit können Sie Parameterwerte festlegen und zurückgeben, ohne den Provider für den Erhalt der Parameterinformationen aufzurufen. Wenn Sie für einen Provider schreiben, der keine Parameterinformationen zur Verfügung stellt, müssen Sie die Parameters-Auflistung mit dieser Methode manuell auffüllen, damit überhaupt Parameter verwendet werden können. Verwenden Sie die Delete-Methode, um die Parameter-Objekte gegebenenfalls aus der Parameters-Auflistung zu entfernen.


Properties-Auflistung (ADO)

Properties-Auflistung

Enthält alle Property-Objekte für eine bestimmte Instanz eines Objekts.

Hinweise

Einige ADO-Objekte besitzen eine Properties-Auflistung, die aus den Property-Objekten besteht. Jedes Property-Objekt entspricht einem Merkmal des ADO-Objekts, das typisch für den Provider ist.

Anmerkung Eine ausführliche Erklärung zum Verwenden von Property-Objekten finden Sie unter dem Hilfethema zum Property -Objekt.


ADO-Methoden

Zusammenfassung der Methoden für ADO

Methode | Beschreibung
AddNew | Erstellt einen neuen Datensatz für ein aktualisierbares Recordset-Objekt.
Append | Hängt ein Objekt an eine Auflistung an. Wenn es sich um eine Fields-Auflistung handelt, kann ein neues Field-Objekt erstellt werden, bevor es an die Auflistung angehängt wird.
AppendChunk | Hängt Daten an ein Field- oder Parameter-Objekt an, das langen Text oder Binärdaten enthält.
BeginTrans, CommitTrans, und RollbackTrans | Verwalten Sie die Transaktionsverarbeitung in einem Connection-Objekt wie folgt: BeginTrans – Beginnt eine neue Transaktion. CommitTrans – Speichert alle Änderungen und beendet die aktuelle Transaktion. Diese Transaktionsmethode kann auch eine neue Transaktion starten. RollbackTrans – Macht alle Änderungen rückgängig und beendet die aktuelle Transaktion. Diese Transaktionsmethode kann auch eine neue Transaktion starten.
Cancel | Bricht die Ausführung eines anstehenden, asynchronen Aufrufs der Execute- oder Open-Methode ab.
Cancel (RDS) | Bricht den laufenden asynchronen Ausführungs- oder Abrufvorgang ab.
CancelBatch | Bricht eine anstehende Stapelaktualisierung ab.
CancelUpdate | Verwirft alle Änderungen, die am aktuellen Datensatz oder an einem neuen Datensatz vor dem Aufrufen der Update-Methode vorgenommen wurden.
CancelUpdate (RDS) | Verwirft alle im Zusammenhang mit dem angegebenen Recordset-Objekt anstehenden Änderungen und stellt so die Werte seit dem letzten Aufruf einer Refresh-Methode wieder her.
Clear | Entfernt alle Objekte in einer Auflistung.
Clone | Erstellt ein Duplikat eines Recordset-Objekts aus einem vorhandenen Recordset-Objekt. Optional können Sie den Schreibschutz für das Duplikat festlegen.
Close | Schließt ein geöffnetes Objekt sowie alle abhängigen Objekte.
CompareBookmarks | Vergleicht zwei Lesezeichen und gibt eine Anzeige ihrer relativen Werte zurück.
ConvertToString | Konvertiert ein Recordset in eine MIME-Zeichenfolge, die die Recordset-Daten darstellt.
CreateObject (RDS) | Erstellt den Proxy für das Zielgeschäftsobjekt und gibt einen Zeiger darauf zurück.
CreateParameter | Erstellt ein neues Parameter-Objekt mit den festgelegten Eigenschaften.
CreateRecordset (RDS) | Erstellt ein leeres, nicht verbundenes Recordset-Objekt.
Delete (ADO Parameters Collection) | Löscht ein Objekt aus der Parameters-Auflistung.
Delete (ADO Parameters Collection) | Löscht ein Objekt aus der Fields-Auflistung.
Delete (ADO Recordset) | Löscht den aktuellen Datensatz oder eine Gruppe von Datensätzen.
Execute (ADO Command) | Führt die Abfrage, die SQL-Anweisung oder die gespeicherte Prozedur aus, die in der CommandText-Eigenschaft festgelegt ist.
Execute (ADO Connection) | Führt die festgelegte Abfrage, die SQL-Anweisung, die gespeicherte Prozedur oder den durch einen Provider festgelegten Text aus.
Find | Sucht in einem Recordset-Objekt nach dem Datensatz, der den angegebenen Kriterien entspricht.
GetChunk | Gibt den gesamten Inhalt oder eine Teilmenge des Inhalts eines Field-Objekts zurück, das langen Text oder Binärdaten enthält.
GetRows | Ruft mehrere Datensätze eines Recordset-Objekts in ein Array ab.
GetString | Gibt das Recordset-Objekt als eine Zeichenfolge zurück.
Item | Gibt ein bestimmtes Element einer Auflistung nach Namen oder Ordinalzahl zurück.
Move | Verschiebt die Position des aktuellen Datensatzes in einem Recordset-Objekt.
MoveFirst, MoveLast, MoveNext, and MovePrevious | Wechselt zum ersten, letzten, nächsten oder vorherigen Datensatz in einem festgelegten Recordset-Objekt und definiert diesen Datensatz als den aktuellen Datensatz.
MoveFirst, MoveLast, MoveNext, MovePrevious (RDS) | Wechselt zum ersten, letzten, nächsten oder vorherigen Datensatz in einem angezeigten Recordset-Objekt.
NextRecordset | Löscht das aktuelle Recordset-Objekt und gibt das nächste Recordset zurück, wobei eine Reihe von Befehlen ausgeführt wird.
Open (ADO Connection) | Öffnet eine Verbindung mit einer Datenquelle.
Open (ADO Recordset) | Öffnet einen Cursor.
OpenSchema | Fordert Informationen über das Datenbankschema vom Provider an.
Query (RDS) | Verwendet eine gültige SQL-Abfragezeichenfolge, um ein Recordset-Objekt zurückzugeben.
Refresh | Aktualisiert die Objekte in einer Auflistung, um Objekte aufzunehmen, die vom Provider erhältlich oder spezifisch für ihn sind.
Refresh (RDS) | Führt eine erneute Abfrage der in der Connect-Eigenschaft festgelegten ODBC-Datenquelle durch und aktualisiert die Abfrageergebnisse.
Requery | Aktualisiert die Daten in einem Recordset-Objekt, indem die Abfrage, auf der das Objekt basiert, erneut ausgeführt wird.
Reset (RDS) | Führt das Sortieren oder Filtern in einem clientbasierten Recordset abhängig von den festgelegten Sortier- und Filtereigenschaften durch.
Resync | Aktualisiert die Daten im aktuellen Recordset-Objekt aus der zugrunde liegenden Datenbank.
Save (ADO Recordset) | Speichert das Recordset-Objekt in einer Datei.
Seek | Durchsucht den Index eines Recordset-Objekts, um schnell die Zeile zu finden, die den angegebenen Werten entspricht und verändert die aktuelle Zeilenposition entsprechend.
SubmitChanges (RDS) | Übermittelt anstehende Änderungen des lokal zwischengespeicherten, aktualisierbaren Recordset-Objekts zu der ODBC-Datenquelle, die in der Connect-Eigenschaft festgelegt ist.
Supports | Bestimmt, ob ein festgelegtes Recordset-Objekt einen bestimmten Funktionstyp unterstützt.
Update | Speichert alle Änderungen, die Sie am aktuellen Datensatz eines Recordset-Objekts vornehmen.
UpdateBatch | Speichert alle anstehenden Stapelaktualisierungen in der Datenbank.


AddNew-Methode (ADO)

AddNew-Methode

Erstellt einen neuen Datensatz für ein aktualisierbares Recordset-Objekt.

Syntax

Recordset.AddNew FieldList, Values

Parameter

FieldList Optional. Ein einzelner Name oder ein Array mit Namen oder Ordinalpositionen der Felder in dem neuen Datensatz.

Values Optional. Ein einzelner Wert oder ein Array mit Werten für die Felder in dem neuen Datensatz. Wenn Fields ein Array ist, muss Values ebenfalls ein Array (mit der gleichen Anzahl an Elementen) sein; andernfalls tritt ein Fehler auf. Die Reihenfolge der Feldnamen muss der Reihenfolge der Feldwerte in jedem Array entsprechen.

Hinweise

Verwenden Sie die AddNew-Methode, um einen neuen Datensatz zu erstellen und zu initialisieren. Verwenden Sie die Supports-Methode zusammen mit adAddNew, um zu überprüfen, ob Sie Datensätze zum aktuellen Recordset-Objekt hinzufügen können.

Nachdem Sie die AddNew-Methode aufgerufen haben, wird der neue Datensatz zum aktuellen Datensatz und bleibt aktuell, nachdem Sie die Update-Methode aufgerufen haben. Wenn das Recordset-Objekt Lesezeichen nicht unterstützt, ist der Zugriff auf den neuen Datensatz eventuell nicht möglich, sobald zu einem anderen Datensatz gewechselt wurde. Abhängig vom verwendeten Cursortyp ist unter Umständen ein Aufruf der Requery-Methode erforderlich, um einen Zugriff auf den neuen Datensatz zu ermöglichen.

Wenn Sie AddNew aufrufen, während Sie den aktuellen Datensatz bearbeiten oder einen neuen Datensatz hinzufügen, ruft ADO die Update-Methode auf, um alle Änderungen zu speichern, und erstellt dann den neuen Datensatz.

Das Verhalten der AddNew-Methode hängt vom Aktualisierungsmodus des Recordset-Objekts ab und davon, ob Sie die Fields- und Values-Argumente übergeben haben.

Wenn der Provider Änderungen sofort in die zugrunde liegende Datenquelle schreibt, sobald Sie die Update-Methode aufrufen, setzt das Aufrufen der AddNew-Methode ohne Argumente die EditMode-Eigenschaft auf adEditAdd. Der Provider speichert alle Feldwertänderungen lokal im Zwischenspeicher. Das Aufrufen der Update-Methode überträgt den neuen Datensatz in die Datenbank und setzt die EditMode-Eigenschaft auf adEditNone zurück. Wenn Sie die Fields- und Values-Argumente übergeben, überträgt ADO den neuen Datensatz sofort in die Datenbank (ein Aufruf von Update ist nicht erforderlich); der EditMode-Eigenschaftswert ändert sich dabei nicht (adEditNone).

Im Stapelaktualisierungsmodus (der Provider speichert mehrere Änderungen im Zwischenspeicher und schreibt sie nur dann in die zugrunde liegende Datenquelle, wenn Sie die UpdateBatch-Methode aufrufen) setzt das Aufrufen der AddNew-Methode ohne Argumente die EditMode-Eigenschaft auf adEditAdd. Der Provider speichert alle Feldwertänderungen lokal im Zwischenspeicher. Das Aufrufen der Update-Methode fügt den neuen Datensatz zum aktuellen Recordset hinzu und setzt die EditMode-Eigenschaft auf adEditNone zurück. Der Provider überträgt die Änderungen zu der zugrunde liegenden Datenbank jedoch erst dann, wenn Sie die UpdateBatch-Methode aufrufen. Wenn Sie die Fields- und Values-Argumente übergeben, übergibt ADO den neuen Datensatz an den Provider zum Speichern in einem Zwischenspeicher. Sie müssen die UpdateBatch-Methode aufrufen, um den neuen Datensatz an die zugrunde liegende Datenbank zu übergeben.

Wenn die dynamische Eigenschaft Unique Table eingestellt ist und das Recordset-Objekt das Ergebnis eines ausgeführten Verbundvorgangs auf mehreren Tabellen ist, können durch die AddNew-Methode nur Felder in die Tabelle eingefügt werden, die in der Eigenschaft Unique Table genannt ist.


Append-Methode (ADO)

Append-Methode

Hängt ein Objekt an eine Auflistung an. Wenn es sich um eine Fields-Auflistung handelt, kann ein neues Field-Objekt erstellt werden, bevor es an die Auflistung angehängt wird.

Syntax

Auflistung.Append Object

Felder.Append Name, Type, DefinedSize, Attrib

Parameter

Auflistung Ein Auflistungsobjekt.

Felder Ein Fields-Auflistungsobjekt.

Object Eine Objektvariable, die das anzuhängende Objekt darstellt.

Name Ein Wert vom Typ String. Der Name des neuen Field-Objekts, der nicht mit den anderen in Felder enthaltenen Objekten übereinstimmen darf.

Type Ein DataTypeEnum mit dem Standardwert adEmpty. Der Datentyp des neuen Feldes.

DefinedSize Optional. Ein Long. Die festgelegte Zeichen- oder Bytegröße des neuen Feldes. Der Standardwert für diesen Parameter wird von dem Type-Wert abgeleitet. (Der standardmäßige Type-Wert ist adEmpty, ein standardmäßiger Wert für die DefinedSize-Eigenschaft ist nicht festgelegt.)

Attrib Optional. Ein FieldAttributeEnum mit dem Standardwert adFldDefault. Legt Attribute für das neue Feld fest. Wenn dieser Wert nicht festgelegt wurde, enthält das Feld vom Type-Wert abgeleitete Attribute.

Parameter

Verwenden Sie die Append-Methode für eine Auflistung, der ein Objekt hinzugefügt werden soll. Diese Methode steht nur für die Parameters-Auflistung eines Command-Objekts zur Verfügung. Sie müssen die Type-Eigenschaft eines Parameter-Objekts festlegen, bevor Sie es der Parameters-Auflistung anhängen können. Wenn Sie einen Datentyp variabler Länge auswählen, müssen Sie außerdem die Size-Eigenschaft auf einen Wert setzen, der größer als Null ist.

Mit der Angabe dieser Eigenschaften können Sie die Abfragen an den Provider auf ein Minimum reduzieren und folglich die Leistung verbessern, wenn Sie gespeicherte Prozeduren oder parametrisierte Abfragen verwenden. Sie müssen jedoch die Eigenschaften der Parameter kennen, die mit der gespeicherten Prozedur oder der parametrisierten Abfrage verbunden sind, die Sie aufrufen möchten. Verwenden Sie die CreateParameter-Methode, um Parameter-Objekte mit den entsprechenden Eigenschaftseinstellungen zu erstellen. Verwenden Sie die Append-Methode, um sie der Parameters-Auflistung hinzuzufügen. Hiermit können Sie Parameterwerte festlegen und zurückgeben, ohne den Provider für den Erhalt der Parameterinformationen aufzurufen. Wenn Sie für einen Provider schreiben, der keine Parameterinformationen zur Verfügung stellt, müssen Sie die Parameters-Auflistung mit dieser Methode manuell auffüllen, damit überhaupt Parameter verwendet werden können.

Fields

Wenn Sie die CursorLocation-Eigenschaft nicht einstellen, bevor Sie die fields.Append-Methode aufrufen,wird CursorLocation automatisch auf adUseClientBatch gesetzt, wenn das Recordset-Objekt mit der Open-Methode geöffnet wird.

Das Aufrufen der fields.Append-Methode für ein geöffnetes Recordset-Objekt oder ein Recordset-Objekt, für das die ActiveConnection-Eigenschaft festgelegt wurde, führt zu einem Laufzeitfehler. Sie können Felder nur an einRecordset-Objekt anhängen, das nicht geöffnet ist und noch nicht mit einer Datenquelle verbunden worden ist. In der Regel handelt es sich hierbei um neue Recordset-Objekte, die Sie mit der CreateRecordset-Methode erstellen, oder indem Sie ein neues Recordset-Objekt ausdrücklich einer Objektvariablen zuweisen.


AppendChunk-Methode (ADO)

AppendChunk-Methode

Hängt Daten an ein Field- oder Parameter-Objekt an, das langen Text oder Binärdaten enthält.

Syntax

Objekt.AppendChunk Data

Parameter

Objekt Ein Field- oder Parameter-Objekt.

Data Ein Wert vom Typ Variant, der die Daten enthält, die an das Objekt angehängt werden sollen.

Hinweise

Verwenden Sie die AppendChunk-Methode für ein Field- oder Parameter-Objekt, um es mit langen Binär- oder Zeichendaten zu füllen. Wenn der Systemspeicher begrenzt ist, können Sie die AppendChunk-Methode dazu verwenden, die Daten statt im Ganzen Stück für Stück zu verarbeiten.

Feld

Wenn das adFldLong-Bit in der Attributes-Eigenschaft eines Field-Objekts auf True gesetzt ist, können Sie die AppendChunk-Methode für dieses Feld verwenden.

Der erste AppendChunk-Aufruf eines Field-Objekts schreibt Daten in das Feld, wobei alle vorhandenen Daten überschrieben werden. Durch nachfolgende Aufrufe von AppendChunk werden die vorhandenen Daten erweitert. Wenn Sie Daten an ein Feld anhängen und dann den Wert eines anderen Feldes im aktuellen Datensatz festlegen oder lesen, geht ADO davon aus, dass das Anhängen von Daten an das erste Feld abgeschlossen wurde. Wenn Sie die AppendChunk-Methode für das erste Feld erneut aufrufen, interpretiert ADO den Aufruf als neue AppendChunk-Operation und überschreibt die vorhandenen Daten. Die AppendChunk-Operation wird durch das Zugreifen auf Felder in anderen Recordset-Objekten (die keine Duplikate des ersten Recordset-Objekts sind) nicht unterbrochen.

Wenn bei einem AppendChunk-Aufruf eines Field-Objekts kein aktueller Datensatz vorhanden ist, tritt ein Fehler auf.

Parameter

Falls das adFldLong-Bit in der Attributes-Eigenschaft eines Parameter-Objekts auf True festgelegt ist, können Sie die AppendChunk-Methode für diesen Parameter verwenden.

Der erste AppendChunk-Aufruf eines Parameter-Objekts schreibt Daten in den Parameter, wobei alle vorhandenen Daten überschrieben werden. Nachfolgende AppendChunk-Aufrufe eines Parameter-Objekts erweitern die vorhandenen Parameterdaten. Durch einen AppendChunk-Aufruf, der den Wert Null übergibt, werden alle Parameterdaten verworfen.


BeginTrans-, CommitTrans- und RollbackTrans-Methode (ADO)

BeginTrans-, CommitTrans- und RollbackTrans-Methode

Mit diesen Transaktionsmethoden wird das Verwalten der Transaktionsverarbeitung innerhalb eines Connection-Objekts wie folgt durchgeführt:

  • BeginTrans – Beginnt eine neue Transaktion.

  • CommitTrans – Speichert alle Änderungen und beendet die aktuelle Transaktion. Diese Transaktionsmethode kann auch eine neue Transaktion starten.

  • RollbackTrans – macht alle im Verlauf der aktuellen Transaktion vorgenommenen Änderungen rückgängig und beendet die Transaktion. Diese Transaktionsmethode kann auch eine neue Transaktion starten.

Syntax

Ebene = Objekt.BeginTrans()

Objekt.BeginTrans

Objekt.CommitTrans

Objekt.RollbackTrans

Rückgabewert

BeginTrans kann als Funktion aufgerufen werden, die eine Variable vom Typ Long zurückgibt, durch die die Schachtelungstiefe der Transaktion angegeben wird.

Parameter

Objekt Ein Connection-Objekt.

Verbindung

Verwenden Sie diese Methoden in Verbindung mit einem Connection-Objekt, wenn Sie eine Reihe von Änderungen speichern oder abbrechen möchten, die Sie an den Quelldaten als einzelne Einheit vorgenommen haben. Um z. B. Geld zwischen Konten zu transferieren, subtrahieren Sie einen Betrag von einem Konto und fügen den gleichen Betrag einem anderen Konto hinzu. Wenn eine der Aktualisierungen fehlschlägt, sind die Kontostände nicht mehr ausgeglichen. Das Durchführen dieser Änderungen innerhalb einer geöffneten Transaktion gewährleistet, dass entweder alle oder keine der Änderungen vorgenommen werden.

Anmerkung Nicht alle Provider unterstützen Transaktionen. Stellen Sie sicher, dass die durch den Provider festgelegte Eigenschaft "Transaction DDL" in der Properties-Auflistung des Connection-Objekts angezeigt wird. Dadurch wird angegeben, dass der Provider Transaktionen unterstützt. Unterstützt der Provider keine Transaktionen wird beim Aufrufen dieser Methoden ein Fehler zurückgegeben.

Sobald Sie die BeginTrans-Methode aufrufen, werden vorgenommene Änderungen vom Provider erst dann unmittelbar durchgeführt, wenn Sie die CommitTrans- oder die RollbackTrans-Methode aufrufen, um die Transaktion zu beenden.

Bei Providern, die geschachtelte Transaktionen unterstützen, startet das Aufrufen der BeginTrans-Methode innerhalb einer geöffneten Transaktion eine neue, geschachtelte Transaktion. Der Rückgabewert zeigt die Ebene der Schachtelung an: Ein Rückgabewert von "1" zeigt an, dass Sie eine Transaktion der oberen Ebene geöffnet haben (d. h., dass die Transaktion nicht innerhalb einer anderen Transaktion geschachtelt ist), ein Rückgabewert von "2" zeigt an, dass Sie eine Transaktion der zweiten Ebene (eine Transaktion, die innerhalb einer Transaktion der oberen Ebene geschachtelt ist) geöffnet haben usw. Das Aufrufen von CommitTrans oder RollbackTrans hat lediglich Einfluss auf die zuletzt geöffnete Transaktion.

Das Aufrufen der CommitTrans-Methode speichert Änderungen, die innerhalb einer geöffneten Transaktion vorgenommen wurden, in der Verbindung und beendet die Transaktion. Das Aufrufen der RollbackTrans-Methode kehrt alle Änderungen um, die Sie innerhalb einer geöffneten Transaktion vorgenommen haben, und beendet die Transaktion. Wenn keine geöffnete Transaktion vorhanden ist, löst das Aufrufen dieser Methoden einen Fehler aus.

In Abhängigkeit von der Attributes-Eigenschaft des Connection-Objekts wird durch das Aufrufen der CommitTrans- oder RollbackTrans-Methode u. U. automatisch eine neue Transaktion gestartet. Wenn die Attributes-Eigenschaft auf adXactCommitRetaining gesetzt ist, startet der Provider nach einem CommitTrans-Aufruf automatisch eine neue Transaktion. Wenn die Attributes-Eigenschaft auf adXactAbortRetaining gesetzt ist, startet der Provider nach einem RollbackTrans-Aufruf automatisch eine neue Transaktion.

Remote Data Service

Die BeginTrans-, CommitTrans- und RollbackTrans-Methoden stehen in einem clientbasierten Connection-Objekt nicht zur Verfügung.


Cancel-Methode (ADO)

Cancel-Methode

Bricht die Ausführung eines anstehenden, asynchronen Aufrufs der Execute- oder Open-Methode ab.

Syntax

Objekt.Cancel

Hinweise

Verwenden Sie die Cancel-Methode, um die Ausführung eines asynchronen Aufrufs der Execute- oder Open-Methode zu beenden (d. h., die Methode wurde mit der adConnectAsync-, adExecuteAsync- oder adFetchAsync-Option aufgerufen). Die Cancel-Methode gibt einen Laufzeitfehler zurück, wenn adAsyncExecute nicht in der Methode verwendet wurde, die Sie beenden möchten.

In der folgenden Tabelle werden die Aufgaben aufgeführt, die bei Verwendung der Cancel-Methode für einen bestimmten Objekttyp beendet werden.

Objekt | Der letzte asynchrone Aufruf für folgende Methode wird beendet
Befehl | Execute
Verbindung | Execute oder Open
Recordset | Open


Cancel-Methode (RDS)

Bricht den laufenden asynchronen Ausführungs- oder Abrufvorgang ab.

Syntax

RDS.DatenSteuerelement.Cancel

Hinweise

Beim Aufrufen der Cancel-Methode wird ReadyState automatisch auf adcReadyStateLoaded gesetzt, und Recordset enthält keine Einträge.


CancelBatch-Methode (ADO)

CancelBatch-Methode

Bricht eine anstehende Stapelaktualisierung ab.

Syntax

Recordset.CancelBatch AffectRecords

Parameter

AffectRecords Optional. Ein AffectEnum-Wert, der bestimmt, wie viele Datensätze durch die CancelBatch-Methode beeinflusst werden. Dies kann eine der folgenden Konstanten sein:

Konstante | Beschreibung
adAffectCurrent | Bricht anstehende Aktualisierungen nur für den aktuellen Datensatz ab.
adAffectGroup | Bricht anstehende Aktualisierungen für Datensätze ab, die der aktuellen Filter-Eigenschaftseinstellung entsprechen. Sie müssen die Filter-Eigenschaft auf eine der gültigen vordefinierten Konstanten festlegen, um diese Option verwenden zu können.
adAffectAll | Voreinstellung. Bricht anstehende Aktualisierungen für alle Datensätze im Recordset-Objekt ab, einschließlich aller durch die aktuelle Filter-Eigenschaftseinstellung versteckten Datensätze.

Hinweise

Verwenden Sie die CancelBatch-Methode, um alle in einem Recordset anstehenden Aktualisierungen im Stapelaktualisierungsmodus abzubrechen. Falls das Recordset von einem Provider verarbeitet wird, der Aktualisierungen sofort durchführt, löst das Aufrufen von CancelBatch ohne adAffectCurrent einen Fehler aus.

Wenn Sie den aktuellen Datensatz bearbeiten oder einen neuen Datensatz beim Aufrufen von CancelBatch hinzufügen, ruft ADO zunächst die CancelUpdate -Methode auf, um alle im Zwischenspeicher enthaltenen Änderungen abzubrechen. Danach werden alle anstehenden Änderungen im Recordset abgebrochen.

Es ist möglich, dass der aktuelle Datensatz nach einem Aufruf von CancelBatch unbestimmbar ist. Dies ist insbesondere dann der Fall, wenn Sie gerade einen neuen Datensatz hinzugefügt haben. Aus diesem Grund empfiehlt es sich, die Position des aktuellen Datensatzes nach dem Aufrufen von CancelBatch auf einen bekannten Standort im Recordset festzulegen. Rufen Sie z. B. die MoveFirst -Methode auf.

Falls der Versuch, die anstehenden Aktualisierungen abzubrechen, aufgrund eines Konflikts mit den zugrunde liegenden Daten fehlschlägt (z. B., weil ein Datensatz von einem anderen Benutzer gelöscht wurde), gibt der Provider Warnmeldungen an die Errors-Auflistung zurück, ohne jedoch die Programmausführung anzuhalten. Ein Laufzeitfehler tritt nur auf, wenn es Konflikte mit allen angeforderten Datensätzen gibt. Verwenden Sie die Filter-Eigenschaft (adFilterAffectedRecords) und die Status-Eigenschaft, um festzustellen, wo sich Datensätze mit Konflikten befinden.


CancelUpdate-Methode (ADO)

CancelUpdate-Methode

Verwirft alle Änderungen, die am aktuellen Datensatz oder an einem neuen Datensatz vor dem Aufrufen der Update -Methode vorgenommen wurden.

Syntax

Recordset.CancelUpdate

Hinweise

Verwenden Sie die CancelUpdate-Methode, um alle Änderungen zu verwerfen, die an dem aktuellen Datensatz vorgenommen wurden, oder um einen neu hinzugefügten Datensatz zu verwerfen. Nach dem Aufruf der Update-Methode können Sie Änderungen an dem aktuellen Datensatz oder an einem neuen Datensatz nicht rückgängig machen, es sei denn, die Änderungen sind entweder Teil einer Transaktion, die Sie mit Hilfe der RollbackTrans-Methode zurücksetzen können, oder Teil einer Stapelaktualisierung, die mit der CancelBatch-Methode abgebrochen werden kann.

Falls Sie beim Aufruf der CancelUpdate-Methode einen neuen Datensatz hinzufügen, wird der Datensatz, der vor dem Aufrufen der AddNew-Methode aktuell war, erneut zum aktuellen Datensatz.

Wurde der aktuelle Datensatz nicht geändert oder kein neuer Datensatz hinzugefügt, löst das Aufrufen der CancelUpdate-Methode einen Fehler aus.


CancelUpdate-Methode (RDS)

Verwirft alle im Zusammenhang mit dem angegebenen Recordset-Objekt anstehenden Änderungen und stellt so die Werte seit dem letzten Aufruf einer Refresh-Methode wieder her.

Syntax

DatenSteuerelement.CancelUpdate

Parameter

DatenSteuerelement Eine Objektvariable, die ein RDS.DataControl-Objekt darstellt.

Hinweise

Der Cursor Service für OLE DB enthält sowohl eine Kopie der Originalwerte als auch einen Zwischenspeicher mit den Änderungen. Beim Aufrufen von CancelUpdate wird der Zwischenspeicher mit den Änderungen geleert, und die gebundenen Steuerelemente werden mit den Originaldaten aktualisiert.


Clear-Methode (ADO)

Clear-Methode

Entfernt alle Objekte in einer Auflistung.

Syntax

Errors.Clear

Hinweise

Verwenden Sie die Clear-Methode für die Errors-Auflistung, um alle vorhandenen Error-Objekte aus der Auflistung zu entfernen. Wenn ein Fehler auftritt, löscht ADO automatisch die Errors-Auflistung und füllt sie basierend auf dem neuen Fehler mit Error-Objekten.

Einige Eigenschaften und Methoden geben Warnmeldungen zurück, die als Error-Objekte in der Errors-Auflistung angezeigt werden, ohne die Programmausführung jedoch anzuhalten. Bevor Sie die Methoden Resync, UpdateBatch, oder die CancelBatch-Methode bei einem Recordset-Objekt aufrufen, die Open-Methode bei einem Connection-Objekt aufrufen oder die Filter-Eigenschaft bei einem Recordset-Objekt aufrufen, rufen Sie die Clear-Methode in der Errors-Auflistung auf. Dadurch können Sie die Count-Eigenschaft der Errors-Auflistung lesen, um nach zurückgegebenen Warnmeldungen zu suchen.


Clone-Methode (ADO)

Clone-Methode

Erstellt ein Duplikat eines Recordset-Objekts aus einem vorhandenen Recordset-Objekt. Optional können Sie den Schreibschutz für das Duplikat festlegen.

Syntax

Set rstDuplikat = rstOriginal.Clone (Sperrtyp)

Rückgabewert

Gibt einen Verweis auf ein Recordset-Objekt zurück.

Parameter

rstDuplikat Eine Objektvariable, die das Duplikat des Recordset-Objekts beschreibt, das Sie erstellen.

rstOriginal Eine Objektvariable, die das Recordset-Objekt beschreibt, das Sie duplizieren möchten.

LockType Optional. Ein LockTypeEnum-Wert, der entweder den Sperrtyp des ursprünglichen Recordset-Objekts oder ein schreibgeschütztes Recordset-Objekt angibt.

Konstante | Beschreibung
adLockUnspecified | Voreinstellung. Das Duplikat wird mit demselben Sperrtyp wie das Original erstellt.
adLockReadOnly | Das Duplikat wird schreibgeschützt erstellt.

Hinweise

Verwenden Sie die Clone-Methode zum Erstellen mehrerer duplizierter Recordset-Objekte, insbesondere dann, wenn Sie mehrere aktuelle Datensätze in einer gegebenen Gruppe von Datensätzen verwalten möchten. Das Verwenden der Clone-Methode ist effizienter als das Erstellen und Öffnen eines neuen Recordset-Objekts mit derselben Definition wie das Original.

Der aktuelle Datensatz eines neu erstellten Duplikats wird auf den ersten Datensatz gesetzt.

Änderungen an einem Recordset-Objekt werden ungeachtet des Cursortyps in all seinen Duplikaten angezeigt. Nachdem Requery einmal auf dem ursprünglichen Recordset-Objekt ausgeführt wurde, werden die Duplikate nicht mehr mit dem Original synchronisiert.

Durch das Schließen des ursprünglichen Recordset-Objekts werden die Kopien nicht automatisch geschlossen. Ebenso wird durch das Schließen einer Kopie weder das Original noch eine der anderen Kopien geschlossen.

Sie können nur ein Recordset-Objekt duplizieren, das Lesezeichen unterstützt. Die Werte für Lesezeichen sind austauschbar; d. h., der Verweis auf ein Lesezeichen aus einem Recordset-Objekt bezieht sich auf denselben Datensatz in jedem seiner Duplikate.


Close-Methode (ADO)

Close-Methode

Schließt ein geöffnetes Objekt sowie alle abhängigen Objekte.

Syntax

Objekt.Close

Hinweise

Verwenden Sie die Close-Methode, um ein Connection- oder ein Recordset-Objekt zu schließen, damit alle verbundenen Systemressourcen freigegeben werden. Das Schließen eines Objekts entfernt dieses nicht aus dem Speicher. Sie können seine Eigenschaftseinstellungen ändern und es zu einem späteren Zeitpunkt öffnen. Um ein Objekt vollständig aus dem Speicher zu entfernen, setzen Sie die Objektvariable auf Nothing.

Verbindung

Das Verwenden der Close-Methode zum Schließen eines Connection-Objekts schließt auch alle aktiven Recordset-Objekte, die der Verbindung zugeordnet sind. Ein Command-Objekt, das mit dem zu schließenden Connection-Objekt verbunden ist, bleibt bestehen. Es ist jedoch nicht länger einem Connection-Objekt zugeordnet, d. h., die ActiveConnection-Eigenschaft wird auf Nothing gesetzt. Darüber hinaus werden in der Parameters-Auflistung des Command-Objekts alle durch den Provider festgelegten Parameter gelöscht.

Die Open-Methode kann später aufgerufen werden, um die Verbindung zu derselben oder einer anderen Datenquelle wiederherzustellen. Solange das Connection-Objekt geschlossen ist, löst das Aufrufen einer anderen Methode, die eine geöffnete Verbindung zur Datenquelle erfordert, einen Fehler aus.

Wenn ein Connection-Objekt geschlossen wird, während geöffnete Recordset-Objekte in der Verbindung vorhanden sind, werden alle anstehenden Änderungen in allen Recordset-Objekten zurückgesetzt. Das explizite Schließen eines Connection-Objekts (das Aufrufen der Close-Methode) während einer Transaktion löst einen Fehler aus. Wenn ein Connection-Objekt während einer Transaktion aus dem Gültigkeitsbereich herausfällt, setzt ADO automatisch die Transaktion zurück.

Recordset

Beim Verwenden der Close-Methode zum Schließen eines Recordset-Objekts werden die verbundenen Daten und alle exklusiven Zugriffsrechte für dieses Recordset-Objekt freigegeben. Sie können später die Open-Methode aufrufen, um das Recordset-Objekt mit denselben oder modifizierten Attributen erneut zu öffnen. Wenn das Recordset-Objekt geschlossen ist, löst das Aufrufen von Methoden, die einen aktiven Cursor erfordern, einen Fehler aus.

Bei einem Bearbeitungsvorgang mit einem Provider, der Änderungen sofort zurückschreibt, löst das Aufrufen der Close-Methode einen Fehler aus. Rufen Sie deshalb zunächst die Update- oder die CancelUpdate-Methode auf. Wenn Sie das Recordset-Objekt während der Stapelaktualisierung schließen, gehen alle seit dem letzten Aufrufen von UpdateBatch vorgenommenen Änderungen verloren.

Wenn Sie die Clone-Methode zum Erstellen von Kopien eines geöffneten Recordset-Objekts verwenden, werden andere Kopien durch das Schließen des Originals oder eines Duplikats nicht beeinflusst.


CompareBookmarks-Methode (ADO)

CompareBookmarks-Methode

Vergleicht zwei Lesezeichen und gibt eine Anzeige ihrer relativen Werte zurück.

Syntax

Ergebnis = Recordset.CompareBookmarks(Lesezeichen1, Lesezeichen2) As CompareEnum

Rückgabewert

Gibt einen Wert zurück, der die relative Zeilenposition von zwei Datensätzen , die durch ihre Lesezeichen dargestellt werden, angibt. Folgende Werte können zurückgegeben werden.

Konstante | Beschreibung
adCompareLessThan | Das erste Lesezeichen befindet sich vor dem zweiten.
adCompareEqual | Die Lesezeichen sind gleich.
adCompareGreaterThan | Das erste Lesezeichen befindet sich hinter dem zweiten.
adCompareNotEqual | Die Lesezeichen sind nicht gleich und nicht sortiert.
adCompareNotComparable | Die Lesezeichen können nicht verglichen werden.

Parameter

Lesezeichen1 Das Lesezeichen der ersten Zeile.

Lesezeichen2 Das Lesezeichen der zweiten Zeile.

Hinweise

Die Lesezeichen müssen für dasselbe Recordset-Objekt oder ein Recordset-Objekt und sein Duplikat gelten. Ein zuverlässiger Vergleich von Lesezeichen aus unterschiedlichen Recordset-Objekten ist nicht möglich, selbst wenn diese anhand derselben Quelle oder mit demselben Befehl erstellt wurden. Außerdem können keine Lesezeichen für ein Recordset-Objekt verglichen werden, dessen zugrunde liegender Provider keine Vergleiche unterstützt.

Eine Zeile in einem Recordset-Objekt wird durch ein Lesezeichen eindeutig bestimmt. Verwenden Sie die Bookmark-Eigenschaft der aktuellen Zeile, um das entsprechende Lesezeichen zu erhalten.

Ein ungültiges oder falsch formatiertes Lesezeichen führt zu einem Fehler.


ConvertToString-Methode (RDS)

Konvertiert ein Recordset in eine MIME-Zeichenfolge, die die Recordset-Daten darstellt.

Syntax

DataFactory.ConvertToString(Recordset)

Parameter

DataFactory Eine Objektvariable, die ein RDSServer.DataFactory-Objekt darstellt.

Recordset Eine Objektvariable , die ein Recordset-Objekt darstellt.

Hinweise

Verwenden Sie bei .asp-Dateien die ConvertToString-Methode, um das Recordset-Objekt in einer auf dem Server generierten HTML-Seite einzubetten, die dann zu einem Clientcomputer gesendet wird.

ConvertToString lädt zunächst das Recordset-Objekt in Cursor Service-Tabellen und generiert dann einen Datenstrom im MIME-Format.

Auf dem Client kann die MIME-Zeichenfolge dann mit Hilfe von RDS (Remote Data Service) in ein voll funktionsfähiges Recordset-Objekt zurückkonvertiert werden. Auf diese Weise können problemlos bis zu 400 Datenzeilen mit bis zu 1024 Byte je Zeile verarbeitet werden. Diese Methode sollte nicht für das Streaming von BLOB-Daten und umfangreichen Ergebnismengen über HTTP verwendet werden. Die Zeichenfolge wird für die Übertragung nicht komprimiert. Daher benötigt der Transport umfangreicher Datasets über HTTP einen sehr langen Zeitraum im Vergleich zu dem optimal für die Übertragung geeigneten Tablegram-Format, das von RDS als systemeigenes Transportprotokollformat definiert und bereitgestellt wird.

Anmerkung Wenn Sie Active Server Pages zum Einbetten der ausgegebenen MIME-Zeichenfolge in einer HTML-Clientseite verwenden, beachten Sie bitte, dass Versionen von VBScript, die vor Version 2.0 veröffentlicht wurden, die Zeichenfolgengröße auf 32 KB begrenzen. Beim Überschreiten dieses Limits wird der Fehler "Nicht genügend Zeichenfolgenspeicher" zurückgegeben. Verwenden Sie einen relativ geringen Abfragebereich, wenn Sie MIME-Daten über .asp-Dateien einbetten. Zu diesem Zweck können Sie die neueste Version von VBScript unter http://www.microsoft.com/germany/vbscript/default.htm downloaden.


CreateObject-Methode (RDS)

Erstellt den Proxy für das Zielgeschäftsobjekt und gibt einen Zeiger darauf zurück. Der Proxy führt das Packen und Marshaling von Daten zum serverseitigen Stub für die Kommunikation mit dem Geschäftsobjekt durch, um Anforderungen und Daten über das Internet zu senden. Für prozessinterne Komponentenobjekte werden keine Proxies verwendet, so dass nur ein Zeiger zum Objekt bereitgestellt wird.

Syntax

Remote Data Service unterstützt die folgenden Protokolle: HTTP, HTTPS (HTTP über Secure Socket Layer), DCOM und prozessinterne Protokolle.

Protokoll | Syntax
HTTP | Set Objekt = Datenbereich.CreateObject("ProgrammID", "http://einWebserver")
HTTPS | Set Objekt = Datenbereich.CreateObject("ProgrammID", "https://einWebserver")
DCOM | Set Objekt = Datenbereich.CreateObject("ProgrammID", "Computername")
Prozessintern | Set Objekt = Datenbereich.CreateObject("ProgrammID", "")

Parameter

Objekt Eine Objektvariable, die ein Objekt des in ProgrammID angegebenen Typs ergibt.

Datenbereich Eine Objektvariable, die ein RDS.DataSpace-Objekt darstellt, das zum Erstellen einer Instanz des neuen Objekts verwendet wird.

ProgrammID Ein Wert vom Typ String, der die Programm-ID darstellt, mit der ein serverbasiertes Geschäftsobjekt angegeben wird, das die Geschäftsregeln der Anwendung implementiert.

EinWebserver oder Computername Ein Wert vom Typ String, der einen URL darstellt, mit dem der Internet Information Server (IIS)-Webserver angegeben wird, auf dem eine Instanz des Geschäftsobjekts für den Server erstellt wird.

Hinweise

Bei dem HTTP-Protokoll handelt es sich um das standardmäßige Webprotokoll. HTTPS ist ein sicheres Webprotokoll. Verwenden Sie das DCOM-Protokoll, wenn ein lokales Netzwerk ohne HTTP ausgeführt wird. Das prozessinterne Protokoll ist eine lokale DLL (Dynamic Link Library); es verwendet kein Netzwerk.


CreateParameter-Methode (ADO)

CreateParameter-Methode

Erstellt ein neues Parameter-Objekt mit den festgelegten Eigenschaften.

Syntax

Set Parameter = Command.CreateParameter (Name, Type, Direction, Size, Value))

Rückgabewert

Gibt ein Parameter-Objekt zurück.

Parameter

Name Optional. Ein String, der den Namen des Parameter-Objekts darstellt.

Type Optional. Ein Long-Wert, der den Datentyp des Parameter-Objekts angibt. Gültige Einstellungen entnehmen Sie bitte der Type-Eigenschaft.

Direction Optional. Ein Long-Wert, der den Typ des Parameter-Objekts angibt. Gültige Einstellungen entnehmen Sie bitte der Direction-Eigenschaft.

Size Optional. Ein Long-Wert, der die maximale Länge für den Parameterwert in Zeichen oder Byte angibt.

Value Optional. Eine Variant-Variable, die den Wert für das Parameter-Objekt festlegt.

Hinweise

Verwenden Sie die CreateParameter-Methode, um ein neues Parameter-Objekt mit den festgelegten Angaben für Name, Typ, Richtung, Größe und Wert zu erstellen. Alle Werte, die Sie in den Argumenten übergeben, werden in die entsprechenden Parameter-Eigenschaften geschrieben.

Diese Methode hängt das Parameter-Objekt nicht automatisch an die Parameters-Auflistung eines Command-Objekts an. Dadurch können Sie zusätzliche Eigenschaften festlegen, deren Werte ADO auf ihre Gültigkeit überprüft, wenn Sie das Parameter-Objekt an die Auflistung anhängen.

Wenn Sie einen Datentyp variabler Länge im Type-Argument festlegen, müssen Sie entweder ein Size-Argument übergeben oder die Size-Eigenschaft des Parameter-Objekts einstellen, bevor Sie es an die Parameters-Auflistung anhängen; andernfalls tritt ein Fehler auf.


CreateRecordset-Methode (RDS)

Erstellt ein leeres, nicht verbundenes Recordset-Objekt.

Syntax

Objekt.CreateRecordset(SpaltenInfos)

Parameter

Objekt Eine Objektvariable, die ein RDSServer.DataFactory-Objekt oder ein RDS.DataControl-Objekt darstellt.

SpaltenInfos Ein Variant-Array mit Feldern, in denen jede im Recordset-Objekt erstellte Spalte definiert ist. Jede Spaltendefinition enthält ein Array mit vier erforderlichen Attributen.

Attribut | Beschreibung
Name | Name des Spaltenheaders.
Typ | Ganzzahliger Datentyp.
Size | Ganzzahliger Wert für die Größe in Zeichen, unabhängig vom Datentyp.
Nullfähigkeit | Ein boolescher Wert

Der Satz der Spaltenfelder wird dann in einem Array gruppiert, das das Recordset-Objekt definiert.

Hinweise

Das serverbasierte Geschäftsobjekt kann das ausgegebene ADODB.Recordset mit Daten eines Datenproviders füllen, der OLE DB nicht unterstützt. Hierbei kann es sich z. B. um eine Betriebssystemdatei handeln, die Lagerquoten enthält.

Die folgende Tabelle enthält die Datentypen, die durch die CreateRecordset-Methode des RDSServer.DataFactory-Objekts unterstützt werden. Die angegebene Zahl ist die Verweisnummer, anhand deren Felder definiert werden.

Jeder dieser Datentypen besitzt entweder eine feste oder eine variable Länge. Datentypen mit fester Länge sollten durch eine Größe von -1 definiert werden, da die Größe vorher festgelegt wurde und eine Größendefinition weiterhin erforderlich ist. Die Größe variabler Datentypen kann zwischen 1 und 32767 liegen.

Bei einigen Datentypen der Variable muss der Typ durch den in der Spalte Ersetzen durch angegebenen Typ ausgetauscht werden. Die Ersetzungen werden erst angezeigt, nachdem das Recordset-Objekt erstellt und gefüllt wurde. Dann können Sie ggf. nach dem tatsächlichen Datentyp suchen.

Länge | Konstante | Zahl | Ersetzen durch
Fest | adTinyInt | 16 |
Fest | adSmallInt | 2 |
Fest | adInteger | 3 |
Fest | adBigInt | 20 |
Fest | adUnsignedTinyInt | 17 |
Fest | adUnsignedSmallInt | 18 |
Fest | adUnsignedInt | 19 |
Fest | adUnsignedBigInt | 21 |
Fest | adSingle | 4 |
Fest | adDouble | 5 |
Fest | adCurrency | 6 |
Fest | adDecimal | 14 |
Fest | adNumeric | 131 |
Fest | adBoolean | 11 |
Fest | adError | 10 |
Fest | adGUID | 72 |
Fest | adDate | 7 |
Fest | adDBDate | 133 |
Fest | adDBTime | 134 |
Fest | adDBTimeStamp | 135 | 7
Variabel | adBSTR | 8 | 130
Variabel | adChar | 129 | 200
Variabel | adVarChar | 200 |
Variabel | adLongVarChar | 201 | 200
Variabel | adWChar | 130 |
Variabel | adVarWChar | 202 | 130
Variabel | adLongVarWChar | 203 | 130
Variabel | adBinary | 128 |
Variabel | adVarBinary | 204 |
Variabel | adLongVarBinary | 205 | 204


Delete-Methode (ADO Parameters-Auflistung)

Löscht ein Objekt aus der Parameters-Auflistung.

Syntax

Parameters.Delete Index

Parameter

Index Ein Wert vom Typ String, der den Namen des zu löschenden Objekts oder die Ordinalposition (Index) des Objekts in der Auflistung darstellt.

Hinweise

Das Verwenden der Delete-Methode in einer Auflistung ermöglicht es, eines der Objekte aus der Auflistung zu entfernen. Diese Methode steht nur für die Parameters-Auflistung eines Command-Objekts zur Verfügung. Sie müssen die Name-Eigenschaft des Parameter-Objekts oder seinen Auflistungsindex verwenden, wenn Sie die Delete-Methode aufrufen – eine Objektvariable ist kein gültiges Argument.


Delete-Methode (ADO Fields-Auflistung)

Löscht ein Objekt aus der Fields-Auflistung.

Syntax

Fields.Delete Field

Parameter

Field Ein Wert vom Typ Variant, der das zu löschende Field-Objekt kennzeichnet. Dieser Parameter muss der Name des Field-Objekts sein. Es kann sich dabei nicht um eine Ordinalposition oder das Field-Objekt selbst handeln.

Hinweise

Das Aufrufen der Fields.Delete-Methode in einem geöffneten Recordset-Objekt führt zu einem Laufzeitfehler.


Delete-Methode (ADO Recordset)

Löscht den aktuellen Datensatz oder eine Gruppe von Datensätzen.

Syntax

Recordset.Delete AffectRecords

Parameter

AffectRecords Optional. Ein AffectEnum-Wert, der bestimmt, wie viele Datensätze durch die Delete-Methode beeinflusst werden. Hierbei kann es sich um eine der folgenden Konstanten handeln.

Konstante | Beschreibung
adAffectCurrent | Voreinstellung. Löscht nur den aktuellen Datensatz.
adAffectGroup | Löscht die Datensätze, die der aktuellen Filter-Eigenschaftseinstellung genügen. Sie müssen die Filter-Eigenschaft auf eine der gültigen vordefinierten Konstanten festlegen, um diese Option verwenden zu können.
adAffectAll | Löscht alle Datensätze.
adAffectAllChapters | Löscht alle Kapitel-Datensätze.

Hinweise

Das Verwenden der Delete-Methode markiert den aktuellen Datensatz oder eine Gruppe von Datensätzen in einem Recordset-Objekt zum Löschen. Falls das Recordset-Objekt das Löschen des Datensatzes nicht zulässt, tritt ein Fehler auf. Wenn Sie sich im Modus für sofortige Aktualisierung befinden, erfolgen die Löschvorgänge in der Datenbank sofort. Andernfalls werden die Datensätze zum Löschen im Zwischenspeicher markiert. Der tatsächliche Löschvorgang findet beim Aufrufen der UpdateBatch-Methode statt. (Verwenden Sie die Filter-Eigenschaft, um die gelöschten Datensätze anzuzeigen.)

Der Abruf von Feldwerten aus dem gelöschten Datensatz löst einen Fehler aus. Nach dem Löschen des aktuellen Datensatzes bleibt der gelöschte Datensatz aktiv, bis Sie zu einem anderen Datensatz wechseln. Sobald Sie den gelöschten Datensatz verlassen, ist ein Zugriff auf diesen Datensatz nicht mehr möglich.

Wenn Sie Löschvorgänge in einer Transaktion schachteln, können Sie gelöschte Datensätze mit der RollbackTrans-Methode wieder herstellen. Falls Sie sich im Stapelaktualisierungsmodus befinden, können Sie einen anstehenden Löschvorgang oder eine Gruppe von anstehenden Löschvorgängen mit der CancelBatch-Methode abbrechen.

Falls der Versuch, Datensätze zu löschen, aufgrund eines Konflikts mit den zugrunde liegenden Daten fehlschlägt (z. B. weil ein Datensatz bereits von einem anderen Benutzer gelöscht wurde), gibt der Provider Warnmeldungen an die Errors-Auflistung aus, ohne die Programmausführung jedoch anzuhalten. Ein Laufzeitfehler tritt nur auf, wenn es Konflikte mit allen angeforderten Datensätzen gibt.

Wenn die dynamische Eigenschaft Unique Table eingestellt ist und das Recordset-Objekt das Ergebnis eines ausgeführten Verbundvorgangs auf mehreren Tabellen ist, werden durch die Delete-Methode nur Zeilen aus der Tabelle gelöscht, die in der Eigenschaft Unique Table genannt ist.


Execute-Methode (ADO Command)

Führt die Abfrage, die SQL-Anweisung oder die gespeicherte Prozedur aus, die in der CommandText-Eigenschaft festgelegt ist.

Syntax

Für ein Command-Objekt, das Zeilen zurückgibt:

Set Recordset = Befehl.Execute( RecordsAffected, Parameters, Options )

Für ein Command-Objekt, das keine Zeile zurückgibt:

Befehl.Execute RecordsAffected, Parameters, Options

Rückgabewert

Gibt einen Verweis auf ein Recordset-Objekt zurück.

Parameter

RecordsAffected Optional. Eine Long-Variable, an die der Provider die Anzahl von Datensätzen zurückgibt, auf die sich die Operation ausgewirkt hat. Der RecordsAffected-Parameter gilt nur für Aktionsabfragen oder gespeicherte Prozeduren. RecordsAffected gibt die Anzahl von Datensätzen nicht zurück, die von einer Abfrage, die Ergebnisse zurückgegeben hat oder einer gespeicherten Prozedur zurückgegeben wurden. Verwenden Sie für diese Informationen die RecordCount-Eigenschaft.

Parameters Optional. Ein Variant-Array von Parameterwerten, das mit einer SQL-Anweisung übergeben wird. (Ausgabeparameter geben keine richtigen Werte zurück, wenn sie in diesem Argument übergeben werden.)

Options Optional. Ein Long-Wert, der angibt, wie der Provider die CommandText-Eigenschaft des Command-Objekts auswerten soll. Dies kann eine der folgenden Konstanten sein:

Konstante | Beschreibung
adCmdText | Gibt an, dass der Provider CommandText als Textdefinition eines Befehls, wie z. B. einer SQL-Anweisung, auswerten soll.
AdCmdTable | Gibt an, dass ADO eine SQL-Abfrage generieren soll, mit der alle Zeilen der in CommandText benannten Tabelle zurückgegeben werden.
AdCmdTableDirect | Gibt an, dass der Provider alle Zeilen der Tabelle zurückgibt, die in CommandText benannt wurde.
AdCmdStoredProc | Gibt an, dass der Provider CommandText als gespeicherte Prozedur auswertet.
AdCmdUnknown | Gibt an, dass der in CommandText verwendete Befehlstyp unbekannt ist.
AdAsyncExecute | Gibt an, dass der Befehl asynchron ausgeführt wird.
AdAsyncFetch | Gibt an, dass die nach der in der CacheSize-Eigenschaft angegebenen Anfangsmenge verbleibenden Zeilen asynchron abgerufen werden.

Eine nähere Erläuterung der ersten vier Konstanten in dieser Liste finden Sie unter CommandType-Eigenschaft.

Hinweise

Durch Verwenden der Execute-Methode in einem Command-Objekt wird die Abfrage ausgeführt, die in der CommandText-Eigenschaft des Objekts festgelegt ist. Falls die CommandText-Eigenschaft eine Abfrage festlegt, die Zeilen zurückgibt, werden alle von der Ausführung erzeugten Ergebnisse in einem neuen Recordset-Objekt gespeichert. Wenn der Befehl eine Abfrage ist, die keine Zeilen zurückgibt, gibt der Provider ein geschlossenes Recordset-Objekt zurück. In einigen Anwendungssprachen können Sie diesen Rückgabewert ignorieren, falls kein Recordset-Objekt gewünscht ist.

Falls die Abfrage Parameter enthält, werden die aktuellen Werte für die Parameter des Command-Objekts verwendet, sofern diese nicht mit den Parameterwerten überschrieben werden, die mit dem Execute-Aufruf übergeben wurden. Sie können eine Untergruppe der Parameter überschreiben, indem Sie neue Werte für einige der Parameter auslassen, wenn Sie die Execute-Methode aufrufen. Die Reihenfolge, in der Sie die Parameter festlegen, entspricht der Reihenfolge, die von der Methode für die Übergabe verwendet wird. Wenn z. B. vier (oder mehr) Parameter vorhanden sind und Sie neue Werte nur für den ersten und vierten Parameter übergeben möchten, würden Sie Array(var1,,,var4) als Parameter-Argument übergeben.

Anmerkung Ausgabeparameter geben keine richtigen Werte aus, wenn sie im Parameter-Argument übergeben werden.

Nach Abschluss dieser Operation wird ein ExecuteComplete-Ereignis ausgelöst.


Execute-Methode (ADO Connection)

Führt die festgelegte Abfrage, die SQL-Anweisung, die gespeicherte Prozedur oder den durch einen Provider festgelegten Text aus.

Syntax

Für eine Befehlszeichenfolge, die keine Zeilen zurückgibt:

Verbindung.Execute CommandText, RecordsAffected, Options

Für eine Befehlszeichenfolge, die Zeilen zurückgibt:

Set Recordset = Verbindung.Execute (CommandText, RecordsAffected, Options)

Rückgabewert

Gibt einen Verweis auf ein Recordset-Objekt zurück.

Parameter

CommandText Ein Wert vom Typ String, der die auszuführende SQL-Anweisung, den Tabellennamen, die gespeicherte Prozedur oder den vom Provider bestimmten Text enthält.

RecordsAffected Optional. Eine Long-Variable, an die der Provider die Anzahl von Datensätzen zurückgibt, auf die sich die Operation ausgewirkt hat.

Options Optional. Ein Long-Wert, der angibt, wie der Provider das CommandText-Argument auswerten soll. Dies kann eine der folgenden Konstanten sein:

Konstante | Beschreibung
adCmdText | Gibt an, dass der Provider CommandText als Textdefinition eines Befehls auswertet.
AdCmdTable | Gibt an, dass ADO eine SQL-Abfrage generieren soll, mit der alle Zeilen der in CommandText benannten Tabelle zurückgegeben werden.
adCmdTableDirect | Gibt an, dass der Provider alle Zeilen der Tabelle zurückgibt, die in CommandText benannt wurde.
adCmdTable | Gibt an, dass der Provider CommandText als Tabellenname auswertet.
adCmdStoredProc | Gibt an, dass der Provider CommandText als gespeicherte Prozedur auswertet.
adCmdUnknown | Gibt an, dass der in dem CommandText-Argument verwendete Befehlstyp unbekannt ist.
adAsyncExecute | Gibt an, dass der Befehl asynchron ausgeführt wird.
adAsyncFetch | Gibt an, dass die nach der in der CacheSize-Eigenschaft angegebenen Anfangsmenge verbleibenden Zeilen asynchron abgerufen werden.

Eine nähere Erläuterung der ersten vier Konstanten in dieser Liste finden Sie unter CommandType-Eigenschaft.

Hinweise

Durch Verwenden der Execute-Methode in einem Connection-Objekt wird die Abfrage ausgeführt, die Sie im CommandText-Argument in der festgelegten Verbindung an die Methode übergeben haben. Falls das CommandText-Argument eine Abfrage festlegt, die Zeilen zurückgibt, werden alle von der Ausführung erzeugten Ergebnisse in einem neuen Recordset-Objekt gespeichert. Wenn der Befehl eine Abfrage ist, die keine Zeilen zurückgibt, gibt der Provider ein geschlossenes Recordset-Objekt zurück.

Das zurückgegebene Recordset-Objekt ist immer ein schreibgeschützter Cursor vom Typ Vorwärts. Wenn Sie ein Recordset-Objekt mit einer größeren Anzahl an Funktionen benötigen, erstellen Sie zunächst ein Recordset-Objekt mit den gewünschten Eigenschaftseinstellungen. Verwenden Sie anschließend die Open-Methode des Recordset-Objekts, um die Abfrage auszuführen und den gewünschten Cursortyp zurückzugeben.

Die Inhalte des CommandText-Arguments sind durch den Provider bestimmt und können eine standardmäßige SQL-Syntax oder jedes bestimmte Befehlsformat besitzen, das vom Provider unterstützt wird.

Nach Abschluss dieser Operation wird ein ExecuteComplete-Ereignis ausgegeben.


Find-Methode (ADO)

Find-Methode

Sucht in einem Recordset-Objekt nach dem Datensatz, der den angegebenen Kriterien entspricht. Ist das Kriterium erfüllt, wird der gefundene Datensatz zum aktuellen Datensatz des Recordsets. Andernfalls wird der Zeiger auf das Ende des Recordsets festgelegt.

Syntax

Find (criteria, SkipRows, searchDirection, start)

Parameter

criteria Ein Wert vom Typ String, der eine Anweisung enthält, mit der der in der Suche zu verwendende Spaltenname, Vergleichsoperator und Wert angegeben wird.

SkipRows Ein optionaler Long-Wert mit einem Standardwert von Null, der den Offset von der aktuellen Zeile oder dem start-Lesezeichen angibt, an dem mit der Suche begonnen wird.

searchDirection Ein optionaler SearchDirectionEnum-Wert, der angibt, ob in der aktuellen Zeile oder in der nächsten in Suchrichtung verfügbaren Reihe mit der Suche begonnen werden soll. Der Wert kann adSearchForward oder adSearchBackward sein. Die Suche stoppt am Anfang oder Ende des Recordsets, je nachdem, welcher Wert für searchDirection angegeben wurde.

start Ein optionales Variant-Lesezeichen, das als Startposition für die Suche verwendet wird.

Hinweise

Der Vergleichsoperator im criteria-Argument kann ">" (größer als), "<" (kleiner als), "=" (gleich) ">=" (größer gleich), "<=" (kleiner gleich), "<>" (ungleich) oder "like" (Mustervergleich) sein.

Der Wert in criteria kann eine Zeichenfolge, eine Fließkommazahl oder ein Datum sein. Zeichenfolgenwerte werden in einfache Anführungszeichen eingeschlossen (z. B. "state = 'WA'"). Datenwerte werden durch "#"-Markierungen (Nummernzeichen) abgetrennt (z. B. "start_date > #7/22/97#").

Wenn der Vergleichsoperator "like" ist, kann die Zeichenfolge Wert die Zeichen "*" (ein oder mehrere Vorkommnisse eines Zeichens) oder "_" (ein Vorkommnis eines Zeichens) enthalten. (Beispielsweise werden für "state like M_*" Maine und Massachusetts als Übereinstimmungen gefunden.)


GetChunk-Methode (ADO)

GetChunk-Methode

Gibt den gesamten Inhalt oder eine Teilmenge des Inhalts eines Field-Objekts zurück, das langen Text oder Binärdaten enthält.

Syntax

Variable = Feld.GetChunk( Size )

Rückgabewert

Gibt einen Variant-Wert zurück.

Parameter

Size Ein Long-Ausdruck, der der abzurufenden Byte- oder Zeichenanzahl entspricht.

Hinweise

Verwenden Sie die GetChunk-Methode in einem Field-Objekt, um einen Teil der bzw. alle langen Binär- oder Zeichendaten abzurufen. Bei beschränktem Systemspeicher können Sie die GetChunk-Methode verwenden, um Werte mit erweiterter Länge in Teilen statt in ihrer Gesamtheit zu bearbeiten.

Die durch einen Aufruf von GetChunk zurückgegebenen Daten werden Variable zugewiesen. Falls Size größer als die vorhandenen Daten ist, gibt die GetChunk-Methode nur die vorhandenen Daten zurück, ohne das Argument Variable mit Leerstellen aufzufüllen. Falls das Feld frei ist, gibt die GetChunk-Methode Null zurück.

Jeder nachfolgende Aufruf von GetChunk ruft die Daten von der Stelle an ab, an der der vorhergehende GetChunk-Aufruf aufgehört hat. Wenn Sie Daten jedoch aus einem Feld abrufen und dann den Wert eines anderen Feldes in dem aktuellen Datensatz festlegen oder lesen, geht ADO davon aus, dass Sie das Abrufen der Daten aus dem ersten Feld abgeschlossen haben. Wenn Sie die GetChunk-Methode für das erste Feld erneut aufrufen, interpretiert ADO den Aufruf als eine neue GetChunk-Operation und beginnt mit dem Lesen am Anfang der Daten. Durch das Zugreifen auf Felder in anderen Recordset-Objekten, die keine Duplikate des ersten Recordset-Objekts sind, werden GetChunk-Operationen nicht unterbrochen.

Falls das adFldLong-Bit in der Attributes-Eigenschaft eines Field-Objekts auf True eingestellt ist, können Sie die GetChunk-Methode für dieses Feld verwenden.

Falls kein aktueller Datensatz vorhanden ist, wenn Sie die GetChunk-Methode in einem Field-Objekt verwenden, tritt Fehler 3021 (keine aktuellen Datensätze) auf.


GetRows-Methode (ADO)

GetRows-Methode

Ruft mehrere Datensätze eines Recordset-Objekts in ein Array ab.

Syntax

Array = Recordset.GetRows( Rows, Start, Fields )

Rückgabewert

Gibt ein zweidimensionales Array zurück.

Parameter

Rows Optional. Ein Long-Ausdruck, der die Anzahl abzurufender Datensätze anzeigt. Die Voreinstellung ist adGetRowsRest (-1).

Start Optional. Eine String- oder Variant-Variable, die das Lesezeichen für den Datensatz ergibt, bei dem die GetRows-Operation beginnen soll. Sie können außerdem einen der folgenden BookmarkEnum-Werte verwenden.

Konstante | Beschreibung
adBookmarkCurrent | Startet beim aktuellen Datensatz.
adBookmarkFirst | Startet beim ersten Datensatz.
adBookmarkLast | Startet beim letzten Datensatz.

Fields Optional. Eine Variant-Variable, die einen einzelnen Feldnamen, eine Ordinalposition, ein Array mit Feldnamen oder Ordinalpositionszahlen darstellt. ADO gibt nur die Daten in diesen Feldern zurück.

Hinweise

Verwenden Sie die GetRows-Methode, um Datensätze aus einem Recordset in ein zweidimensionales Array zu kopieren. Der erste Index kennzeichnet das Feld und der zweite die Datensatznummer. Die Variable Array erhält automatisch die richtige Größe, wenn die GetRows-Methode die Daten zurückgibt.

Wenn Sie keinen Wert für das Rows-Argument festlegen, ruft die GetRows-Methode automatisch alle Datensätze in dem Recordset-Objekt ab. Falls Sie mehr Datensätze anfordern, als vorhanden sind, gibt GetRows nur die Anzahl der verfügbaren Datensätze zurück.

Falls das Recordset-Objekt Lesezeichen unterstützt, können Sie festlegen, bei welchem Datensatz die GetRows-Methode den Datenabruf beginnen soll, indem Sie den Wert der Bookmark-Eigenschaft dieses Datensatzes übergeben.

Wenn Sie die Felder beschränken möchten, die der GetRows-Aufruf zurückgibt, können Sie im Fields-Argument entweder einen einzelnen Feldnamen, eine einzelne Feldnummer oder ein Array mit Feldnamen bzw. –nummern übergeben.

Nachdem Sie GetRows aufgerufen haben, wird der nächste ungelesene Datensatz zum aktuellen Datensatz. Falls es keine weiteren Datensätze gibt, wird die EOF-Eigenschaft auf True gesetzt.


GetString-Methode (ADO Recordset)

Gibt das Recordset-Objekt als eine Zeichenfolge zurück.

Syntax

Set Variant = Recordset.GetString(StringFormat, NumRows, ColumnDelimiter, RowDelimiter, NullExpr)

Rückgabewert

Gibt das Recordset-Objekt als eine Variant-Variable (BSTR) mit Zeichenfolgenwerten zurück.

Parameter

StringFormat Legt fest, dass das Recordset-Objekt in das folgende Format konvertiert wird.

Konstante | Beschreibung
adClipString | Zeilen werden durch RowDelimiter, Spalten durch ColumnDelimiter und NULL-Werte durch NullExpr von einander getrennt. Diese drei Parameter sind nur mit adClipString gültig.

NumRows Optional. Die Anzahl der Zeilen im zu konvertierenden Recordset. Wenn NumRows nicht festgelegt wurde oder wenn es größer als die Gesamtanzahl der Zeilen im Recordset ist, werden alle Zeilen im Recordset konvertiert.

ColumnDelimiter Optional. Sofern festgelegt, werden Trennzeichen zwischen den Spalten verwendet, andernfalls das TAB-Zeichen.

RowDelimiter Optional. Sofern festgelegt, werden Trennzeichen zwischen den Zeilen verwendet, andernfalls das Zeichen für WAGENRÜCKLAUF.

NullExpr Optional. Sofern festgelegt, wird anstelle eines NULL-Wertes ein angegebener Ausdruck verwendet, andernfalls eine leere Zeichenfolge.

Hinweise

In der Zeichenfolge werden zwar Zeilendaten, jedoch keine Strukturdaten gespeichert. Daher kann ein Recordset unter Verwendung dieser Zeichenfolge nicht erneut geöffnet werden.

Diese Methode entspricht der GetClipString-Methode in RDO.


Item-Methode (ADO)

Item-Methode

Gibt ein bestimmtes Element einer Auflistung nach Namen oder Ordinalzahl zurück.

Syntax

Set Objekt = Auflistung.Item ( Index )

Rückgabewert

Gibt einen Objektverweis zurück.

Parameter

Index Ein Wert vom Typ Variant, der entweder den Namen oder die Ordinalzahl eines Objekts in einer Auflistung ergibt.

Hinweise

Verwenden Sie die Item-Methode, um ein bestimmtes Objekt in einer Auflistung zurückzugeben. Wenn die Methode kein Objekt in der Auflistung finden kann, das dem Index-Argument entspricht, tritt ein Fehler auf. Einige Auflistungen unterstützen benannte Objekte nicht. Für diese Auflistungen müssen Sie Ordinalzahlverweise verwenden.

Die Item-Methode ist die Standardmethode für alle Auflistungen. Daher sind die folgenden Syntaxformen austauschbar:

Auflistung.Item (Index)

Auflistung (Index)


Move-Methode (ADO)

Move-Methode

Verschiebt die Position des aktuellen Datensatzes in einem Recordset-Objekt.

Syntax

Recordset.Move NumRecords, Start

Parameter

NumRecords Ein Long-Ausdruck mit Vorzeichen, der die Anzahl der Datensätze festlegt, um die die aktuelle Datensatzposition verschoben werden soll.

Start Optional. Ein Wert vom Typ String oder Variant, der ein Lesezeichen ergibt. Sie können außerdem einen der folgenden BookmarkEnum-Werte verwenden:

Konstante | Beschreibung
adBookmarkCurrent | Voreinstellung. Startet beim aktuellen Datensatz.
adBookmarkFirst | Startet beim ersten Datensatz.
adBookmarkLast | Startet beim letzten Datensatz.

Hinweise

Die Move-Methode wird von allen Recordset-Objekten unterstützt.

Falls das NumRecords-Argument größer als Null ist, wird die aktuelle Datensatzposition in Vorwärtsrichtung (in Richtung des Recordset-Endes) verschoben. Falls NumRecords kleiner als Null ist, wird die aktuelle Datensatzposition rückwärts (in Richtung des Recordset-Anfangs) verschoben.

Falls der Move-Aufruf die aktuelle Datensatzposition an eine Stelle vor dem ersten Datensatz verschieben würde, setzt ADO den aktuellen Datensatz an die Position vor dem ersten Datensatz im Recordset (BOF ist True). Der Versuch, sich rückwärts zu bewegen, wenn die BOF-Eigenschaft bereits den Wert True besitzt, löst einen Fehler aus.

Falls der Move-Aufruf die aktuelle Datensatzposition an eine Stelle nach dem letzten Datensatz verschieben würde, versetzt ADO den aktuellen Datensatz an die Position nach dem letzten Datensatz im Recordset (EOF ist True). Der Versuch, sich vorwärts zu bewegen, wenn die EOF-Eigenschaft bereits den Wert True besitzt, löst einen Fehler aus.

Das Aufrufen der Move-Methode aus einem leeren Recordset-Objekt löst einen Fehler aus.

Wenn Sie das Start-Argument übergeben, verläuft das Verschieben relativ zum Datensatz mit diesem Lesezeichen, vorausgesetzt, dass das Recordset-Objekt Lesezeichen unterstützt. Falls nicht, verläuft das Verschieben relativ zum aktuellen Datensatz.

Wenn Sie die CacheSize-Eigenschaft zum lokalen Zwischenspeichern von Datensätzen des Providers verwenden, dann veranlasst dies ADO bei der Übergabe eines NumRecords-Arguments, das die aktuelle Datensatzposition zwischengespeicherter Datensätze aus der aktuellen Gruppe hinaus verschiebt, eine neue Gruppe von Datensätzen, beginnend mit dem Zieldatensatz, abzurufen. Die CacheSize-Eigenschaft bestimmt die Größe der neu abgerufenen Gruppe. Der Zieldatensatz ist der erste abgerufene Datensatz.

Falls das Recordset-Objekt nur vorwärts gerichtet ist, kann der Benutzer so lange ein NumRecords-Argument unter Null übergeben, wie sich das Ziel innerhalb der aktuellen Gruppe der zwischengespeicherten Datensätze befindet. Falls der Move-Aufruf die aktuelle Datensatzposition zu einem Datensatz vor dem ersten zwischengespeicherten Datensatz verschiebt, tritt ein Fehler auf. Daher kann es vorteilhafter sein, den Datensatz-Zwischenspeicher eines Providers zu verwenden, der ein Blättern in beide Richtungen unterstützt, als den Datensatz-Zwischenspeicher eines Providers, der nur das vorwärts gerichtete Blättern unterstützt. Da zwischengespeicherte Datensätze in den Speicher geladen werden, sollten Sie möglichst nicht mehr Datensätze als nötig zwischenspeichern. Selbst wenn ein ausschließlich vorwärts gerichtetes Recordset-Objekt auf diese Weise Verschiebungen in Rückwärtsrichtung unterstützt, löst das Aufrufen der MovePrevious-Methode für jedes ausschließlich vorwärts gerichtetes Recordset-Objekt weiterhin einen Fehler aus.


MoveFirst-, MoveLast-, MoveNext- und MovePrevious-Methoden (ADO)

MoveFirst-, MoveLast-, MoveNext- und MovePrevious-Methoden

Wechselt zum ersten, letzten, nächsten oder vorherigen Datensatz in einem festgelegten Recordset-Objekt und definiert diesen Datensatz als den aktuellen Datensatz.

Syntax

Recordset.{MoveFirst | MoveLast | MoveNext | MovePrevious}

Hinweise

Verwenden Sie die MoveFirst-Methode, um die aktuelle Datensatzposition zum ersten Datensatz im Recordset zu verschieben.

Verwenden Sie die MoveLast-Methode, um die aktuelle Datensatzposition zum letzten Datensatz im Recordset zu verschieben. Das Recordset-Objekt muss Lesezeichen oder rückwärts gerichtete Cursorbewegungen unterstützen; anderenfalls löst der Aufruf der Methode einen Fehler aus.

Verwenden Sie die MoveNext-Methode, um die aktuelle Datensatzposition um einen Datensatz vorwärts (in Richtung des Recordset-Endes) zu verschieben. Falls der aktuelle Datensatz der letzte Datensatz ist und Sie die MoveNext-Methode aufrufen, setzt ADO den aktuellen Datensatz an die Position nach dem letzten Datensatz im Recordset (EOF ist True). Der Versuch, sich vorwärts zu bewegen, wenn die EOF-Eigenschaft bereits den Wert True besitzt, löst einen Fehler aus.

Verwenden Sie die MovePrevious-Methode, um die aktuelle Datensatzposition einen Datensatz zurück zu verschieben (in Richtung des Recordset-Anfangs). Das Recordset-Objekt muss Lesezeichen oder rückwärts gerichtete Cursorbewegungen unterstützen; andernfalls löst der Aufruf der Methode einen Fehler aus. Falls der aktuelle Datensatz der erste Datensatz ist und Sie die MovePrevious-Methode aufrufen, setzt ADO den aktuellen Datensatz an die Position vor dem ersten Datensatz im Recordset (BOF ist True). Der Versuch, sich rückwärts zu bewegen, wenn die BOF-Eigenschaft bereits den Wert True besitzt, löst einen Fehler aus. Falls das Recordset-Objekt weder Lesezeichen noch rückwärts gerichtete Cursorbewegungen unterstützt, löst die MovePrevious-Methode einen Fehler aus.

Falls der Datensatz ausschließlich vorwärts gerichtet ist und Sie Datensatzwechsel sowohl in Vorwärts- als auch in Rückwärtsrichtung unterstützen möchten, können Sie die CacheSize-Eigenschaft verwenden, um einen Datensatz-Zwischenspeicher zu erstellen, der rückwärts gerichtete Cursorbewegungen durch die Move-Methode unterstützt. Da zwischengespeicherte Datensätze in den Speicher geladen werden, sollten Sie möglichst nicht mehr Datensätze als nötig zwischenspeichern. Sie können die MoveFirst-Methode in einem ausschließlich vorwärts gerichteten Recordset-Objekt aufrufen. In diesem Fall führt der Provider gegebenenfalls erneut den Befehl aus, mit dem das Recordset-Objekt erzeugt wurde.


MoveFirst-, MoveLast-, MoveNext-, MovePrevious-Methoden (RDS)

Wechselt zum ersten, letzten, nächsten oder vorherigen Datensatz in einem angezeigten Recordset-Objekt.

Syntax

DatenSteuerelement.{MoveFirst | MoveLast | MoveNext | MovePrevious}

Parameter

DatenSteuerelement Eine Objektvariable, die ein RDS.DataControl-Objekt darstellt.

Hinweise

Sie können die Move-Methoden bei dem RDS.DataControl-Objekt verwenden, um sich durch die Datensätze in den datengebundenen Steuerelementen einer Webseite zu bewegen. Angenommen, Sie zeigen z. B. ein Recordset in einem Raster durch Bindung an ein RDS.DataControl-Objekt an. Sie können dann die Schaltflächen für den ersten, vorhergehenden, nächsten und letzten Datensatz einfügen, die Benutzer verwenden können, um zum entsprechenden Datensatz im angezeigten Recordset zu gelangen. Zu diesem Zweck rufen Sie die MoveFirst-, MoveLast-, MoveNext- und MovePrevious-Methoden des RDS.DataControl-Objekts in den OnClick-Prozeduren für die entsprechenden Schaltflächen auf. Im Address Book-Beispiel wird dieses Verfahren näher erläutert.


NextRecordset-Methode (ADO)

NextRecordset-Methode

Löscht das aktuelle Recordset-Objekt und gibt das nächste Recordset zurück, wobei eine Reihe von Befehlen ausgeführt wird.

Syntax

Set Recordset2 = Recordset1.NextRecordset( RecordsAffected )

Rückgabewert

Gibt ein Recordset-Objekt zurück. Im Syntaxmodell kann es sich bei Recordset1 und Recordset2 um dasselbe Recordset-Objekt handeln. Sie können jedoch auch unterschiedliche Objekte verwenden.

Parameter

RecordsAffected Optional. Eine Long-Variable, an die der Provider die Anzahl von Datensätzen zurückgibt, auf die sich die aktuelle Operation ausgewirkt hat.

Anmerkung Dieser Parameter gibt nur die Anzahl der Datensätze zurück, auf die sich eine Operation ausgewirkt hat; er gibt keine Zählung der Datensätze aus einer ausgewählten Anweisung zurück, die zum Generieren des Recordset verwendet wurde.

Hinweise

Verwenden Sie die NextRecordset-Methode, um die Ergebnisse des nächsten Befehls einer zusammengesetzten Befehlsanweisung oder die Ergebnisse einer gespeicherten Prozedur zurückzugeben. Wenn Sie ein Recordset-Objekt basierend auf einer zusammengesetzten Befehlsanweisung (z. B. "SELECT * FROM Tabelle1;SELECT * FROM Tabelle2") durch Verwenden der Execute-Methode in einem Command-Objekt oder der Open-Methode in einem Recordset-Objekt öffnen, führt ADO nur den ersten Befehl aus und gibt die Ergebnisse an Recordset zurück. Um auf die Ergebnisse von nachfolgenden Befehlen in der Anweisung zuzugreifen, rufen Sie die NextRecordset-Methode auf.

So lange zusätzliche Ergebnisse vorhanden sind und das Recordset, das die zusammengesetzte Befehlsanweisung enthält, nicht über Prozessgrenzen hinweg durch Marshaling zurückgegeben wird, gibt die NextRecordset-Methode weiterhin Recordset-Objekte zurück., Falls ein Befehl, der Zeilen zurückgeben kann, keine Datensätze zurückgibt, bleibt das zurückgegebene Recordset-Objekt leer. Überprüfen Sie dies, indem Sie feststellen, ob die BOF- und die EOF-Eigenschaft beide den Wert True besitzen. Wenn ein Befehl, der keine Zeilen zurückgibt, erfolgreich ausgeführt wurde, wird das zurückgegebene Recordset-Objekt geschlossen. Dies können Sie durch Testen der State-Eigenschaft in dem Recordset überprüfen. Wenn keine weiteren Ergebnisse vorhanden sind, wird Recordset auf Nothing gesetzt.

Verwenden von Remote Data Service Die NextRecordset-Methode steht auf einem clientbasierten Recordset-Objekt nicht zur Verfügung.

Bei einem Bearbeitungsvorgang im Modus für sofortige Aktualisierung löst das Aufrufen der NextRecordset-Methode einen Fehler aus. Rufen Sie deshalb zunächst die Update- oder die CancelUpdate-Methode auf.

Wenn Sie Parameter für mehrere Befehle in der zusammengesetzten Anweisung übergeben müssen, indem Sie die Parameters-Auflistung füllen oder ein Array mit dem ursprünglichen Open- oder Execute-Aufruf übergeben, müssen die Parameter in der Auflistung oder dem Array in derselben Reihenfolge angeordnet sein wie die entsprechenden Befehle in den Befehlsreihen. Sie müssen das Lesen aller Ergebnisse beenden, bevor Ausgabeparameterwerte gelesen werden können.

Wenn Sie die NextRecordset-Methode aufrufen, führt ADO nur den nächsten Befehl in der Anweisung aus. Falls Sie das Recordset-Objekt explizit schließen, bevor Sie die schrittweise Bearbeitung der gesamten Befehlsanweisung durchführen, führt ADO die verbleibenden Befehle nicht aus.


Open-Methode (ADO Connection)

Öffnet eine Verbindung mit einer Datenquelle.

Syntax

connection.Open ConnectionString, UserID, Password, Options

Parameter

ConnectionString Optional. Ein Wert vom Typ String, der die Verbindungsinformationen enthält. Einzelheiten zu den gültigen Einstellungen finden Sie unter ConnectionString-Eigenschaft.

UserID Optional. Ein Wert vom Typ String, der einen Benutzernamen enthält, der beim Herstellen der Verbindung verwendet wird.

Kennwort Optional. Ein Wert vom Typ String, der ein Kennwort enthält, das beim Herstellen der Verbindung verwendet wird.

Options Optional. Ein ConnectOptionEnum-Wert, der bestimmt, ob die Rückgabe durch diese Methode erfolgen sollte, nachdem die Verbindung hergestellt wurde (synchron) oder bevor sie hergestellt wurde (asynchron). Hierbei kann es sich um eine der folgenden Konstanten handeln.

Konstante | Beschreibung
adConnectUnspecified | (Voreinstellung) Öffnet die Verbindung synchron.
adAsyncConnect | Öffnet die Verbindung asynchron. Mit Hilfe des ConnectComplete-Ereignisses kann bestimmt werden, wann die Verbindung verfügbar ist.

Hinweise

Das Verwenden der Open-Methode in einem Connection-Objekt stellt die physische Verbindung mit einer Datenquelle her. Nachdem diese Methode erfolgreich abgeschlossen wurde, ist die Verbindung aktiv. Sie können nun Befehle darin verwenden und die Ergebnisse verarbeiten.

Verwenden Sie das optionale ConnectionString-Argument, um eine Verbindungszeichenfolge anzugeben, die eine Reihe von durch Semikolons getrennte "Argument = Wert"-Anweisungen enthält. Die ConnectionString-Eigenschaft übernimmt automatisch den Wert, der für das ConnectionString-Argument verwendet wird. Deshalb können Sie entweder die ConnectionString-Eigenschaft des Connection-Objekts festlegen, bevor Sie es öffnen, oder Sie verwenden das ConnectionString-Argument, um die aktuellen Verbindungsparameter während des Aufrufs der Open-Methode festzulegen oder zu überschreiben.

Wenn Sie Benutzer- und Kennwortinformationen sowohl im ConnectionString-Argument als auch in den optionalen UserId- und Password-Argumenten übergeben, überschreiben die UserID- und Password-Argumente die in ConnectionString festgelegten Werte.

Wenn Sie diese Operationen in einem geöffneten Connection-Objekt abgeschlossen haben, verwenden Sie die Close-Methode, um alle zugeordneten Systemressourcen freizugeben. Das Schließen eines Objekts entfernt dieses nicht aus dem Speicher. Sie können seine Eigenschaftseinstellungen ggf. ändern und die Open-Methode verwenden, um es später erneut zu öffnen. Um ein Objekt vollständig aus dem Speicher zu entfernen, setzen Sie die Objektvariable auf Nothing.

Verwendung von Remote Data Service Bei Verwendung in einem clientseitigen Connection-Objekt richtet die Open-Methode erst dann tatsächlich eine Verbindung mit dem Server ein, wenn ein Recordset in dem Connection-Objekt geöffnet wurde.


Open-Methode (ADO Recordset)

Öffnet einen Cursor.

Syntax

recordset.Open Source, ActiveConnection, CursorType, LockType, Options

Parameter

Source Optional. Ein Wert vom Typ Variant, der einen gültigen Variablennamen des Command-Objekts, eine SQL-Anweisung, einen Tabellennamen, einen Aufruf einer gespeicherten Prozedur oder den Dateinamen eines permanenten Recordset ergibt.

ActiveConnection Optional. Entweder ein Wert vom Typ Variant, der einen gültigen Variablennamen des Connection-Objekts ergibt, oder ein Wert vom Typ String, der ConnectionString-Parameter enthält.

CursorType Optional. Ein CursorTypeEnum-Wert, der den Cursortyp bestimmt, den der Provider beim Öffnen des Recordset-Objekts verwendet. Hierbei kann es sich um eine der folgenden Konstanten handeln (Definitionen dieser Einstellungen finden Sie unter CursorType-Eigenschaft).

Konstante | Beschreibung
adOpenForwardOnly | (Voreinstellung) Öffnet einen Vorwärtscursor.
adOpenKeyset | Öffnet einen Cursor vom Typ Schlüsselgruppen.
adOpenDynamic | Öffnet einen dynamischen Cursor.
adOpenStatic | Öffnet einen statischen Cursor.

LockType Optional. Ein LockTypeEnum-Wert, der bestimmt, welches Sperrverfahren (Parallelität) der Provider beim Öffnen des Recordset-Objekts verwenden soll. Hierbei kann es sich um eine der folgenden Konstanten handeln (weitere Informationen erhalten Sie unter LockType-Eigenschaft).

Konstante | Beschreibung
adLockReadOnly | (Voreinstellung) Schreibgeschützt - Sie können die Daten nicht ändern.
adLockPessimistic | Vollständiges Sperren, Datensatz für Datensatz - der Provider führt die notwendigen Schritte aus, um das erfolgreiche Bearbeiten der Datensätze sicherzustellen, üblicherweise indem er Datensätze in der Datenquelle sofort beim Bearbeiten sperrt.
adLockOptimistic | Teilweises Sperren, Datensatz für Datensatz - der Provider verwendet teilweises Sperren, indem er Datensätze nur sperrt, wenn Sie die Update-Methode aufrufen.
adLockBatchOptimistic | Teilweise Stapelaktualisierungen - erforderlich für den Stapelaktualisierungsmodus, im Gegensatz zum Modus für sofortige Aktualisierung.

Options Optional. Ein Long-Wert, der entweder angibt, wie der Provider das Source-Argument auswertet, wenn dieses kein Command-Objekt darstellt, oder angibt, dass das Recordset aus einer Datei wiederhergestellt wird, in der es vorher gespeichert war. Hierbei kann es sich um eine der folgenden Konstanten handeln. (Weitere Erläuterungen zu den ersten fünf Konstanten in dieser Liste erhalten Sie unter CommandType-Eigenschaft.)

Konstante | Beschreibung
adCmdText | Gibt an, dass der Provider Source als Textdefinition eines Befehls auswertet.
adCmdTable | Gibt an, dass ADO eine SQL-Abfrage generiert, um alle Zeilen der in Source benannten Tabelle zurückzugeben.
adCmdTableDirect | Gibt an, dass der Provider alle Zeilen der Tabelle zurückgibt, die in Source benannt wurde.
adCmdStoredProc | Gibt an, dass der Provider Source als gespeicherte Prozedur auswertet.
adCmdUnknown | Gibt an, dass der in dem Source-Argument verwendete Befehlstyp unbekannt ist.
adCmdFile | Gibt an, dass das beständige (gespeicherte) Recordset aus der in Source bezeichneten Datei wieder hergestellt wird.
adAsyncExecute | Gibt an, dass das Source-Argument asynchron ausgeführt wird.
adAsyncFetch | Gibt an, dass nach dem Abrufen der in der Initial Fetch Size-Eigenschaft festgelegten Anfangsmenge alle verbleibenden Zeilen asynchron abgerufen werden. Ist eine Zeile erforderlich, die nicht abgerufen worden ist, dann ist der Haupt-Thread blockiert, bis die erforderliche Zeile verfügbar wird.
adAsyncFetchNonBlocking | Gibt an, dass der Haupt-Thread während des Abrufs nicht blockiert ist. Wenn die erforderliche Zeile nicht abgerufen worden ist, wird die aktuelle Zeile automatisch ans Ende der Datei verschoben.

Hinweise

Das Verwenden der Open-Methode in einem Recordset-Objekt öffnet einen Cursor, der Datensätze aus einer Basistabelle, die Ergebnisse einer Abfrage oder ein zuvor gespeichertes Recordset darstellt.

Verwenden Sie das optionale Source-Argument, um eine Datenquelle festzulegen, die eines der folgenden Elemente verwendet: eine Command-Objektvariable, eine SQL-Anweisung, eine gespeicherte Prozedur, einen Tabellennamen oder einen vollständigen Pfadnamen einer Datei. Handelt es sich bei Source um den Pfadnamen einer Datei, so kann dieser Pfad vollständig sein ("c:\dir\file.rst"), er kann relativ sein ("..\file.rst"), oder er kann ein URL sein ("http://files/file.rst").

Das ActiveConnection-Argument entspricht der ActiveConnection-Eigenschaft und legt fest, in welcher Verbindung das Recordset-Objekt geöffnet wird. Wenn Sie eine Verbindungsdefinition für dieses Argument übergeben, öffnet ADO eine neue Verbindung unter Verwendung der festgelegten Parameter. Sie können den Wert dieser Eigenschaft nach dem Öffnen des Recordset ändern, um Aktualisierungen an einen anderen Provider zu senden. Sie können diese Eigenschaft jedoch auch auf Nothing (in Microsoft Visual Basic) setzen, um die Verbindung des Recordset zu allen Providern zu trennen.

Für die weiteren Argumente, die den Eigenschaften eines Recordset-Objekts (Source, CursorType und LockType) direkt entsprechen, ist die Beziehung der Argumente zu den Eigenschaften wie folgt:

  • Die Eigenschaft ist eine Lese-/Schreib-Eigenschaft, bevor das Recordset-Objekt geöffnet wird.

  • Die Eigenschaftseinstellungen werden verwendet, sofern Sie die entsprechenden Argumente nicht beim Ausführen der Open-Methode übergeben. Wenn Sie ein Argument übergeben, überschreibt es die entsprechende Eigenschaftseinstellung. Diese wird dann mit dem Argumentwert aktualisiert.

  • Nachdem Sie das Recordset-Objekt geöffnet haben, werden diese Eigenschaften schreibgeschützt.

    Anmerkung Für die Recordset-Objekte, deren Source-Eigenschaft auf ein gültiges Command-Objekt gesetzt ist, ist die ActiveConnection-Eigenschaft schreibgeschützt, selbst wenn das Recordset-Objekt nicht geöffnet ist.

Wenn Sie gleichzeitig ein Command-Objekt im Source-Argument und ein ActiveConnection-Argument übergeben, tritt ein Fehler auf. Die ActiveConnection-Eigenschaft des Command-Objekts muss bereits auf ein gültiges Connection-Objekt oder eine Verbindungszeichenfolge festgelegt sein.

Wenn Sie ein anderes Element als ein Command-Objekt im Source-Argument übergeben, können Sie das Options-Argument verwenden, um die Auswertung des Source-Arguments zu optimieren. Falls das Options-Argument nicht definiert ist, werden Sie ggf. eine verminderte Leistung feststellen, da ADO Aufrufe an den Provider durchführen muss, um zu bestimmen, ob es sich bei dem Argument um eine SQL-Anweisung, eine gespeicherte Prozedur oder einen Tabellennamen handelt. Wenn Sie wissen, welchen Source-Typ Sie verwenden, wird ADO durch das Festlegen des Options-Arguments angewiesen, direkt zum jeweiligen Code zu springen. Falls das Options-Argument nicht mit dem Source-Typ übereinstimmt, tritt ein Fehler auf.

Die Voreinstellung für das Options-Argument ist adCommandFile, sofern dem Recordset keine Verbindung zugeordnet ist. Dies ist üblicherweise bei gespeicherten Recordset-Objekten der Fall.

Wenn die Datenquelle keine Datensätze zurückgibt, setzt der Provider sowohl die BOF- als auch die EOF-Eigenschaft auf den Wert True. Die aktuelle Datensatzposition ist nicht definiert. Sie können diesem leeren Recordset-Objekt weiter neue Daten hinzufügen, falls der Cursortyp dies zulässt.

Wenn Sie die Operationen in einem geöffneten Recordset-Objekt abgeschlossen haben, verwenden Sie die Close-Methode, um alle zugeordneten Systemressourcen freizugeben. Das Schließen eines Objekts entfernt dieses nicht aus dem Speicher. Sie können seine Eigenschaftseinstellungen ggf. ändern und die Open-Methode verwenden, um es später erneut zu öffnen. Um ein Objekt vollständig aus dem Speicher zu entfernen, setzen Sie die Objektvariable auf Nothing.

Rufen Sie vor dem Festlegen der ActiveConnection-Eigenschaft die Open-Methode ohne Operanden auf, um eine Instanz eines Recordset zu erstellen, das durch das Anhängen von Feldern an die Recordset Fields-Auflistung erstellt wurde.

Wenn Sie die CursorLocation-Eigenschaft auf adUseClient gesetzt haben, können Sie Zeilen asynchron abrufen. Dazu haben Sie folgende Möglichkeit: Die empfohlene Methode ist, Options auf adAsyncFetch zu setzen. Die Alternative besteht darin, die dynamische Eigenschaft Asynchrone Rowset-Verarbeitung in der Properties-Auflistung zu verwenden, aber damit zusammenhängende abgerufene Ereignisse können verloren gehen, wenn Sie den Parameter Options nicht auf adAsyncFetch setzen.

Hinweis Beim MSRemote-Provider wird das Abrufen im Hintergrund nur durch den Parameter Options der Open-Methode unterstützt.


OpenSchema-Methode (ADO)

OpenSchema-Methode

Fordert Informationen über das Datenbankschema vom Provider an.

Syntax

Set Recordset = Verbindung.OpenSchema (QueryType, Criteria, SchemaID)

Rückgabewerte

Gibt ein Recordset-Objekt zurück, das Schemainformationen enthält. Das Recordset wird als schreibgeschützter, statischer Cursor geöffnet.

Parameter

QueryType Der Typ der auszuführenden Schemaabfrage. Hierbei kann es sich um eine der unten aufgeführten Konstanten handeln.

Criteria Optional. Ein Array mit Abfragebeschränkungen für jede QueryType-Option (wie unten angegeben).

QueryType-Werte | Criteria-Werte
adSchemaAsserts | CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME
adSchemaCatalogs | CATALOG_NAME
adSchemaCharacterSets | CHARACTER_SET_CATALOG CHARACTER_SET_SCHEMA CHARACTER_SET_NAME
adSchemaCheckConstraints | CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME
adSchemaCollations | COLLATION_KATALOG COLLATION_SCHEMA COLLATION_NAME
adSchemaColumnDomainUsage | DOMAIN_CATALOG DOMAIN_SCHEMA DOMAIN_NAME COLUMN_NAME
adSchemaColumnPrivileges | TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME GRANTOR GRANTEE
adSchemaColumns | TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME
adSchemaConstraintColumnUsage | TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME
adSchemaConstraintTableUsage | TABLE_CATALOG TABLE_SCHEMA TABLE_NAME
adSchemaForeignKeys | PK_TABLE_CATALOG PK_TABLE_SCHEMA PK_TABLE_NAME FK_TABLE_CATALOG FK_TABLE_SCHEMA FK_TABLE_NAME
adSchemaIndexes | TABLE_CATALOG TABLE_SCHEMA INDEX_NAME TYPE TABLE_NAME
adSchemaKeyColumnUsage | CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME
adSchemaPrimaryKeys | PK_TABLE_CATALOG PK_TABLE_SCHEMA PK_TABLE_NAME
adSchemaProcedureColumns | PROCEDURE_CATALOG PROCEDURE_SCHEMA PROCEDURE_NAME COLUMN_NAME
adSchemaProcedureParameter | PROCEDURE_CATALOG PROCEDURE_SCHEMA PROCEDURE_NAME PARAMTER_NAME
adSchemaProcedures | PROCEDURE_CATALOG PROCEDURE_SCHEMA PROCEDURE_NAME PROCEDURE_TYPE
adSchemaProviderSpecific | Siehe Hinweise
adSchemaProviderTypes | DATA_TYPE BEST_MATCH
adSchemaReferentialConstraints | CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME
adSchemaSchemata | CATALOG_NAME SCHEMA_NAME SCHEMA_OWNER
adSchemaSQLLanguages | <keine>
adSchemaStatistics | TABLE_CATALOG TABLE_SCHEMA TABLE_NAME
adSchemaTableConstraints | CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_CATALOG TABLE_SCHEMA TABLE_NAME CONSTRAINT_TYPE
adSchemaTablePrivileges | TABLE_CATALOG TABLE_SCHEMA TABLE_NAME GRANTOR GRANTEE
adSchemaTables | TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE
adSchemaTranslations | TRANSLATION_CATALOG TRANSLATION_SCHEMA TRANSLATION_NAME
adSchemaUsagePrivileges | OBJECT_CATALOG OBJECT_SCHEMA OBJECT_NAME OBJECT_TYPE GRANTOR GRANTEE
adSchemaViewColumnUsage | VIEW_CATALOG VIEW_SCHEMA VIEW_NAME
adSchemaViewTableUsage | VIEW_CATALOG VIEW_SCHEMA VIEW_NAME
adSchemaViews | TABLE_CATALOG TABLE_SCHEMA TABLE_NAME

SchemaID Der globale eindeutige Bezeichner (Globally Unique Identifier, GUID) für eine Abfrage eines Providerschemas, der nicht durch die OLE DB-Angabe definiert ist. Dieser Parameter wird benötigt, wenn QueryType auf adSchemaProviderSpecific gesetzt ist, andernfalls wird er nicht verwendet.

Hinweise

Die OpenSchema-Methode gibt Informationen über die Datenquelle zurück. Hierbei kann es sich z. B. um Informationen über die Tabellen auf dem Server oder die Spalten in den Tabellen handeln.

Das Criteria-Argument ist ein Array mit Werten, mit dessen Hilfe die Ergebnismenge einer Schemaabfrage eingegrenzt werden kann. Jede Schemaabfrage unterstützt einen anderen Satz von Parametern. Die aktuellen Schemas sind durch die OLE DB-Angabe in der IDBSchemaRowset-Schnittstelle definiert. Die in ADO unterstützten Schemas sind oben aufgeführt.

Die Konstante adSchemaProviderSpecific wird für das QueryType-Argument verwendet, wenn der Provider eigene nichtstandardisierte Schemaabfragen definiert, die nicht in der obigen Liste enthalten sind. Bei Verwendung dieser Konstante wird das SchemaID-Argument verwendet, um die GUID der Schemaabfrage zum Ausführen zu übergeben. Wenn QueryType auf adSchemaProviderSpecific gesetzt ist, SchemaID jedoch nicht zur Verfügung steht, tritt ein Fehler auf.

Es ist nicht erforderlich, dass Provider alle OLE DB-Standardschemaabfragen unterstützen. Die OLE DB-Angabe erfordert insbesondere nur adSchemaTables, adSchemaColumns und adSchemaProviderTypes. Der Provider muss jedoch für diese Schemaabfragen nicht die in der obigen Tabelle aufgeführten Criteria-Beschränkungen unterstützen.

Verwenden von Remote Data Service Die OpenSchema-Methode steht in einem clientbasierten (ADOR) Connection-Objekt nicht zur Verfügung.

Hinweis In Visual Basic können Spalten mit einer 4 Byte umfassenden Ganzzahl ohne Vorzeichen (DBTYPE UI4) im Recordset, die von der OpenSchema-Methode im Connection-Objekt zurückgegeben werden, nicht mit anderen Variablen verglichen werden. Weitere Informationen zu OLE DB-Datentypen erhalten Sie in Kapitel 10 und Anhang A des Microsoft OLE DB Programmer's Reference.


Query-Methode (RDS)

Verwendet eine gültige SQL-Abfragezeichenfolge, um ein Recordset-Objekt zurückzugeben.

Syntax

Set Recordset = DataFactory.Query Verbindung, Abfrage

Parameter

Recordset Eine Objektvariable, die ein Recordset-Objekt darstellt.

DataFactory Eine Objektvariable, die ein RDSServer.DataFactory-Objekt darstellt.

Verbindung Ein Wert vom Typ String, der die Serververbindungsinformationen enthält. Dies ähnelt der Connect-Eigenschaft.

Abfrage Ein Wert vom Typ String, der die SQL-Abfrage enthält.

Hinweise

Die Abfrage sollte den SQL-Dialekt des Datenbankservers verwenden. Wenn bei der ausgeführten Abfrage ein Fehler auftritt, wird ein Ergebnisstatus zurückgegeben. Die Query-Methode führt keine Syntaxüberprüfung der Query-Zeichenfolge durch.


Refresh-Methode (ADO)

Refresh-Methode

Aktualisiert die Objekte in einer Auflistung, um Objekte aufzunehmen, die vom Provider erhältlich oder spezifisch für ihn sind.

Syntax

Auflistung.Refresh

Hinweise

Die Refresh-Methode führt abhängig von der Auflistung, aus der Sie sie aufrufen, verschiedene Aufgaben aus.

Parameter

Durch Verwenden der Refresh-Methode in einer Parameters-Auflistung eines Command-Objekts werden vom Provider Parameterinformationen für die gespeicherte Prozedur oder für die parametrisierte Abfrage abgerufen, die im Command-Objekt angegeben sind. Die Auflistung bleibt leer für Provider, die Aufrufe gespeicherter Prozeduren oder parametrisierte Abfragen nicht unterstützen.

Sie sollten die ActiveConnection-Eigenschaft des Command-Objekts auf ein gültiges Connection-Objekt, die CommandText-Eigenschaft auf einen gültigen Befehl und die CommandType-Eigenschaft auf adCmdStoredProc festlegen, bevor Sie die Refresh-Methode aufrufen.

Wenn Sie auf die Parameters-Auflistung zugreifen, bevor Sie die Refresh-Methode aufrufen, ruft ADO automatisch diese Methode auf und füllt die Auflistung auf.

Anmerkung Wenn Sie die Refresh-Methode verwenden, um Parameterinformationen vom Provider zu erhalten und ein oder mehrere Parameter-Datentypobjekte mit variabler Länge zurückgegeben werden, weist ADO unter Umständen den Parametern abhängig von ihrer maximal möglichen Größe Arbeitsspeicher zu. Dies kann während der Ausführung zu einem Fehler führen. Die Size-Eigenschaft für diese Parameter sollte vor dem Aufrufen der Execute-Methode explizit festgelegt werden, um Fehler zu vermeiden.

Fields

Das Verwenden der Refresh-Methode in der Fields-Auflistung hat keine sichtbare Wirkung. Um Änderungen an der zugrunde liegenden Datenbankstruktur abzurufen, muss entweder die Requery-Methode oder, falls das Recordset-Objekt keine Lesezeichen unterstützt, die MoveFirst-Methode verwendet werden.

Eigenschaften

Durch Verwenden der Refresh-Methode in einer Properties-Auflistung wird bei einigen Objekten die Auflistung mit den dynamischen Eigenschaften aufgefüllt, die der Provider offenlegt. Diese Eigenschaften enthalten Informationen über die besondere Funktionalität eines Providers, die über die von ADO unterstützten integrierten Eigenschaften hinausgehen.


Refresh-Methode (RDS)

Führt eine erneute Abfrage der in der Connect-Eigenschaft festgelegten ODBC-Datenquelle durch und aktualisiert die Abfrageergebnisse.

Syntax

DatenSteuerelement.Refresh

Parameter

DatenSteuerelement Eine Objektvariable, die ein RDS.DataControl-Objekt darstellt.

Hinweise

Vor dem Verwenden der Refresh-Methode müssen die Eigenschaften Connect, Server und SQL festgelegt werden. Alle datengebundenen Steuerelemente auf dem Formular, denen ein RDS.DataControl-Objekt zugeordnet ist, spiegeln den neuen Satz an Datensätzen wider. Alle bereits vorhandenen Recordset-Objekte werden freigegeben, und jegliche nicht gespeicherten Änderungen werden verworfen. Die Refresh-Methode verwendet automatisch den ersten Datensatz als aktuellen Datensatz.

Beim Arbeiten mit Daten ist es ratsam, die Refresh-Methode in regelmäßigen Abständen aufzurufen. Wenn Sie Daten abrufen und diese einige Zeit auf dem Clientcomputer belassen, ist es möglich, dass diese Daten an Aktualität verlieren. Möglicherweise schlagen alle von Ihnen vorgenommenen Änderungen fehl, da andere Personen u. U. den Datensatz geändert und Änderungen vor Ihnen übermittelt haben.


Requery-Methode (ADO)

Requery-Methode

Aktualisiert die Daten in einem Recordset-Objekt, indem die Abfrage, auf der das Objekt basiert, erneut ausgeführt wird.

Syntax

Recordset.Requery Options

Parameter

Options Optional. Eine Bit-Maske, in der Optionen angegeben sind, die diese Operation betreffen. Wenn dieser Parameter auf adAsyncExecute gesetzt ist, wird diese Operation asynchron ausgeführt. Nach ihrem Abschluss wird ein RecordsetChangeComplete-Ereignis ausgegeben.

Hinweise

Verwenden Sie die Requery-Methode, um den gesamten Inhalt eines Recordset-Objekts aus der Datenquelle zu aktualisieren, indem Sie den ursprünglichen Befehl erneut verwenden und die Daten ein zweites Mal abrufen. Das Aufrufen dieser Methode entspricht dem aufeinander folgenden Aufruf der Methoden Close und Open. Falls Sie den gerade aktuellen Datensatz bearbeiten oder einen neuen Datensatz hinzufügen, tritt ein Fehler auf.

Während das Recordset-Objekt geöffnet ist, sind die Eigenschaften schreibgeschützt, die den Typ des Cursors (CursorType, LockType, MaxRecords usw.) bestimmen. Deshalb kann die Requery-Methode nur den aktuellen Cursor aktualisieren. Um eine beliebige Cursoreigenschaft zu ändern und die Ergebnisse anzuzeigen, müssen Sie die Close-Methode verwenden, damit die Eigenschaften wieder Lese-/Schreib-Eigenschaften werden. Sie können die Eigenschaftseinstellungen dann ändern und die Open-Methode aufrufen, um den Cursor erneut zu öffnen.


Reset-Methode (RDS)

Führt das Sortieren oder Filtern in einem clientbasierten Recordset abhängig von den festgelegten Sortier- und Filtereigenschaften durch.

Syntax

DatenSteuerelement.Reset(Wert)

Parameter

DatenSteuerelement Eine Objektvariable, die ein RDS.DataControl-Objekt darstellt.

Wert Optional. Ein boolescher Wert, der True (Voreinstellung) ist, wenn ein Filtern des aktuellen "gefilterten" Rowsets durchgeführt werden soll. False gibt an, dass das Filtern im ursprünglichen Rowset durchgeführt wird. Hierdurch werden alle vorher festgelegten Filteroptionen entfernt.

Hinweise

Die Eigenschaften SortColumn, SortDirection, FilterValue, FilterCriterion und FilterColumn stellen Sortier- und Filterfunktionalitäten im clientbasierten Zwischenspeicher zur Verfügung. Die Sortierfunktion sortiert Datensätze nach Werten aus einer Spalte. Die Filterfunktionalität zeigt eine Teilmenge der Datensätze auf der Grundlage eines Suchkriteriums an, während das vollständige Recordset im Zwischenspeicher verbleibt. Die Reset-Methode führt die Kriterien aus und ersetzt das aktuelle Recordset-Objekt durch ein aktualisierbares Recordset-Objekt.

Müssen noch Änderungen an den Originaldaten durchgeführt werden, die noch nicht übermittelt wurden, schlägt die Reset-Methode fehl. Verwenden Sie zunächst die SubmitChanges-Methode, um alle Änderungen in einem Recordset mit Lese-/Schreibberechtigung zu speichern, und dann die Reset-Methode, um die Datensätze zu sortieren oder zu filtern.

Sollen auf das Rowset mehrere Filter angewendet werden, können Sie das optionale boolesche Argument mit der Reset-Methode verwenden. Im folgenden Beispiel ist dieses Verfahren dargestellt:

ADC.SQL = "Select au_lname from authors"
ADC.Refresh        ' Neues Rowset abrufen.

ADC.FilterColumn = "au_lname"
ADC.FilterCriterion = "<"
ADC.FilterValue = "'M'"
ADC.Reset            ' Rowset beinhaltet jetzt alle ' Datensätze mit Nachnamen < "M".

ADC.FilterCriterion = ">"
ADC.FilterValue = "'F'"
' True zu übergeben ist nicht notwendig, da es die
' Voreinstellung für das bereits gefilterte Rowset ist.
ADC.Reset(TRUE)        ' Rowset beinhaltet nun alle Datensätze mit
                        ' Nachnamen < "M" und > "F".

ADC.FilterCriterion = ">"
ADC.FilterValue = "'T'"
' Filter wird jetzt auf das ursprüngliche Rowset angewandt,
' wobei die vorhergehenden Filteroptionen ignoriert werden.
ADC.Reset(FALSE)    ' Rowset beinhaltet nun alle Datensätze mit
                        ' Nachnamen > "T".


Resync-Methode (ADO)

Resync-Methode

Aktualisiert die Daten im aktuellen Recordset-Objekt aus der zugrunde liegenden Datenbank.

Syntax

Recordset.Resync AffectRecords, ResyncValues

Parameter

AffectRecords Optional. Ein AffectEnum-Wert, der die Anzahl der durch die Resync-Methode beeinflussten Datensätze bestimmt. Hierbei kann es sich um eine der folgenden Konstanten handeln.

Konstante | Beschreibung
adAffectCurrent | Aktualisiert nur den aktuellen Datensatz.
adAffectGroup | Aktualisiert die Datensätze, die der aktuellen Filter-Eigenschaftseinstellung entsprechen. Sie müssen die Filter-Eigenschaft auf eine der gültigen vordefinierten Konstanten festlegen, um diese Option verwenden zu können.
adAffectAll | Voreinstellung. Aktualisiert alle Datensätze im Recordset-Objekt, einschließlich aller durch die aktuelle Filter-Eigenschaftseinstellung verborgenen Datensätze.
adAffectAllChapters | Aktualisiert alle Kapitel-Datensätze.

ResyncValues Optional. Ein ResyncEnum-Wert, der angibt, ob zugrunde liegende Werte überschrieben werden. Hierbei kann es sich um eine der folgenden Konstanten handeln.

Konstante | Beschreibung
adResyncAllValues | Voreinstellung. Daten werden überschrieben, und nicht abgeschlossene Aktualisierungen werden abgebrochen.
adResyncUnderlyingValues | Daten werden nicht überschrieben, und anstehende Aktualisierungen werden nicht abgebrochen.

Hinweise

Verwenden Sie die Resync-Methode, um die Datensätze im aktuellen Recordset-Objekt mit der zugrunde liegenden Datenbank neu zu synchronisieren. Dies ist hilfreich, wenn Sie entweder einen statischen Cursor oder einen Vorwärtscursor verwenden, aber alle Änderungen in der zugrunde liegenden Datenbank angezeigt werden sollen.

Wenn Sie die CursorLocation-Eigenschaft auf adUseClient setzen, ist Resync nur für nicht schreibgeschützte Recordset-Objekte verfügbar.

Im Gegensatz zur Requery-Methode führt die Resync-Methode den zugrunde liegenden Befehl des Recordset-Objekts nicht noch einmal aus. Neue Datensätze in der zugrunde liegenden Datenbank werden nicht angezeigt.

Falls der Versuch, eine neue Synchronisierung durchzuführen, aufgrund eines Konflikts mit den zugrunde liegenden Daten scheitert (z. B., weil ein Datensatz von einem anderen Benutzer gelöscht wurde), gibt der Provider Warnmeldungen an die Errors-Auflistung zurück, und ein Laufzeitfehler tritt auf. Verwenden Sie die Filter-Eigenschaft (adFilterConflictingRecords) und die Status-Eigenschaft, um festzustellen, wo sich Datensätze mit Konflikten befinden.

Verwenden von Remote Data Service Die Resync-Methode steht auf einem clientbasierten (ADOR) Recordset-Objekt nicht zur Verfügung.

Wenn die dynamischen Eigenschaften Unique Table und Resync Command eingestellt sind, und das Recordset-Objekt das Ergebnis eines ausgeführten Verbundvorgangs auf mehreren Tabellen ist, dann führt die Resync-Methode den in der Resync Command-Eigenschaft gegebenen Befehl nur in der Tabelle aus, die in der Unique Table-Eigenschaft genannt ist.


Save-Methode (ADO Recordset)

Speichert das Recordset-Objekt in einer Datei.

Syntax

Recordset.Save FileName, PersistFormat

Parameter

FileName Optional. Der vollständige Pfadname der Datei, in der das Recordset gespeichert wird.

PersistFormat Optional. Ein PersistFormatEnum-Wert, der angibt, in welchem Format das Recordset gespeichert werden soll. Hierbei kann es sich um eine der folgenden Konstanten handeln.

Konstante | Beschreibung
adPersistADTG | (Voreinstellung) Speichert im Format Advanced Data Tablegram.
adPersistXML | Speichert im Format XML.

Hinweise

Die Save-Methode kann nur in einem geöffneten Recordset aufgerufen werden. Verwenden Sie die Open-Methode, um das Recordset zu einem späteren Zeitpunkt aus FileName wiederherzustellen.

Wenn die Filter-Eigenschaft für das Recordset aktiv ist, werden nur die Zeilen gespeichert, auf die bei gesetztem Filter zugegriffen werden kann. Handelt es sich um ein hierarchisches Recordset-Objekt, werden das aktuelle untergeordnete Recordset und die diesem untergeordneten Recordsets gespeichert, nicht jedoch das übergeordnete Recordset.

Geben Sie, wenn Sie das Recordset-Objekt zum ersten Mal speichern, FileName an. Wenn Sie danach Save aufrufen, übergehen Sie FileName. Andernfalls tritt ein Laufzeitfehler auf. Wenn Sie danach Save mit einem neuen Wert für FileName aufrufen, wird das Recordset–Objekt in der neuen Datei gespeichert. Die neue Datei und die ursprüngliche Datei sind jedoch beide geöffnet.

Save schließt Recordset oder FileName nicht, so dass Sie weiterhin mit dem Recordset–Objekt arbeiten und die letzten Änderungen speichern können. FileName bleibt so lange geöffnet, bis das Recordset–Objekt geschlossen wird. Während dieser Zeit können andere Anwendungen FileName lesen, aber nicht schreibend darauf zugreifen.

Aus Sicherheitsgründen erlaubt die Save-Methode nur die Verwendung niedriger und benutzerdefinierter Sicherheitseinstellungen über ein Skript, das von Microsoft Internet Explorer ausgeführt wird. Nähere Einzelheiten zu Sicherheitsfragen finden Sie im Bericht mit dem Titel "Security Issues in the Microsoft Internet Explorer," unter der Adresse http://www.microsoft.com/data/techmat.htm.

Wenn die Save-Methode während einer asynchronen Abruf-, Ausführungs- oder Aktualisierungsoperation des Recordsets aufgerufen wird, wartet Save, bis die asynchrone Operation abgeschlossen ist.

Wenn die Save-Methode beendet ist, wird die aktuelle Zeilenposition zur ersten Zeile des Recordsets.

Die besten Ergebnisse erzielen Sie, wenn Sie die CursorLocation-Eigenschaft bei Save auf adUseClient setzen. Unterstützt der Provider nicht die gesamte Funktionalität, die zum Speichern von Recordset-Objekten notwendig ist, dann stellt der Clientcursor diese Funktionalität zur Verfügung.


Seek-Methode

Durchsucht den Index eines Recordset-Objekts, um schnell die Zeile zu finden, die den angegebenen Werten entspricht und verändert die aktuelle Zeilenposition entsprechend.

Syntax

recordset.Seek KeyValues, SeekOption

Parameter

KeyValues Ein Array mit Werten vom Typ VARIANT. Ein Index besteht aus einer oder mehreren Spalten, und das Array enthält einen Wert, der mit jeder dieser Spalten verglichen werden kann.

SeekOption Ein SeekEnum-Wert, der die Art des durchzuführenden Vergleichs zwischen den Indexspalten und den entsprechenden KeyValues angibt. Hierbei kann es sich um eine der folgenden Konstanten handeln.

Konstante | Beschreibung
adSeekAfterEQ | Sucht entweder einen Schlüssel, der gleich KeyValues ist oder sucht ihn in dem direkt auf eine Übereinstimmung folgenden Bereich.
adSeekAfter | Sucht einen Schlüssel in dem Bereich, der direkt auf eine Übereinstimmung mit KeyValues folgt.
adSeekBeforeEQ | Sucht entweder einen Schlüssel, der gleich KeyValues ist oder sucht ihn im einer Übereinstimmung direkt vorangehenden Bereich.
adSeekBefore | Sucht einen Schlüssel in dem Bereich, der einer Übereinstimmung mit KeyValues direkt vorangeht.
adSeekFirstEQ | Sucht den ersten Schlüssel, der gleich KeyValues ist.
adSeekLastEQ | Sucht den letzten Schlüssel, der gleich KeyValues ist.

Hinweise

Verwenden Sie die Seek-Methode zusammen mit der Index-Eigenschaft, wenn der zugrunde liegende Provider Indizes bei einem Recordset-Objekt nicht unterstützt. Entscheiden Sie, ob der zugrunde liegende Provider Indizes mit der Supports (adIndex)-Methode unterstützt.

Findet Seek die gewünschte Zeile nicht, dann tritt kein Fehler auf, und die Zeile wird EOF positioniert. Setzen Sie die Index-Eigenschaft auf den gewünschten Index, bevor Sie diese Methode ausführen.

Diese Methode kann nur verwendet werden, wenn die CursorLocation-Eigenschaft des Recordset-Objekts einen von adUseClient abweichenden Wert hat.


SubmitChanges-Methode (RDS)

Übermittelt anstehende Änderungen des lokal zwischengespeicherten, aktualisierbaren Recordset-Objekts zu der ODBC-Datenquelle, die in der Connect-Eigenschaft festgelegt ist.

Syntax

DatenSteuerelement.SubmitChanges

DataFactory.SubmitChanges Verbindung, Recordset

Parameter

DatenSteuerelement Eine Objektvariable, die ein RDS.DataControl-Objekt darstellt.

DataFactory Eine Objektvariable, die ein RDSServer.DataFactory-Objekt darstellt.

Verbindung Ein String-Wert, der die mit der Connect-Eigenschaft des RDS.DataControl-Objekts erstellte Verbindung darstellt.

Recordset Eine Objektvariable , die ein Recordset-Objekt darstellt.

Hinweise

Die Connect-, Server- und SQL-Eigenschaften müssen festgelegt werden, bevor die SubmitChanges-Methode mit dem RDS.DataControl-Objekt verwendet werden kann.

Wird die CancelUpdate-Methode aufgerufen, nachdem SubmitChanges für dasselbe Recordset-Objekt aufgerufen wurde, schlägt der CancelUpdate-Aufruf fehl, da die Änderungen bereits vorgenommen wurden.

Nur die geänderten Datensätze werden zur Bearbeitung übergeben. Entweder werden alle Änderungen erfolgreich durchgeführt oder alle Änderungen schlagen fehl.

SubmitChanges kann nur mit dem voreingestellten RDSServer.DataFactory-Objekt verwendet werden. Diese Methode kann nicht für benutzerdefinierte Geschäftsobjekte verwendet werden.


Supports-Methode (ADO)

Supports-Methode

Bestimmt, ob ein festgelegtes Recordset-Objekt einen bestimmten Funktionstyp unterstützt.

Syntax

boolescherWert = Recordset.Supports( CursorOptions )

Rückgabewert

Gibt einen booleschen Wert zurück, der angibt, ob alle durch das CursorOptions-Argument festgelegten Features durch den Provider unterstützt werden.

Parameter

CursorOptions Ein Long-Ausdruck, der sich aus einem oder mehreren der folgenden CursorOptionEnum-Werte zusammensetzt.

Konstante | Beschreibung
adAddNew | Mit der AddNew-Methode können neue Datensätze hinzugefügt werden.
adApproxPosition | Die AbsolutePosition- und AbsolutePage-Eigenschaften können gelesen und festgelegt werden.
adBookmark | Mit der Bookmark-Eigenschaft kann auf bestimmte Datensätze zugegriffen werden.
adDelete | Mit der Delete-Methode können Datensätze gelöscht werden.
adHoldRecords | Sie können die nächsten Datensätze abrufen oder die nächste Abrufposition ändern, ohne alle anstehenden Änderungen abzuschließen.
adMovePrevious | Mit den MoveFirst- und MovePrevious-Methoden sowie mit der Move- oder GetRows-Methode kann die aktuelle Datensatzposition rückwärts verschoben werden, ohne dass Lesezeichen benötigt werden.
adResync | Der Cursor kann mit den in der zugrunde liegenden Datenbank angezeigten Daten unter Verwendung der Resync-Methode aktualisiert werden.
adUpdate | Mit der Update-Methode können vorhandene Daten geändert werden.
adUpdateBatch | Mit Hilfe von Stapelaktualisierungen (UpdateBatch- und CancelBatch-Methoden) können Gruppen von Änderungen an den Provider übertragen werden.
adIndex | Sie können die Index-Eigenschaft zum Benennen eines Indexes verwenden.
adSeek | Sie können die Seek-Methode verwenden, um eine Zeile in einem Recordset-Objekt zu finden.

Hinweise

Verwenden Sie die Supports-Methode, um zu bestimmen, welche Funktionstypen ein Recordset-Objekt unterstützt. Falls das Recordset-Objekt die Features unterstützt, deren Konstanten sich in CursorOptions befinden, gibt die Supports-Methode den Wert True zurück. Andernfalls wird False zurückgegeben.

Anmerkung Obwohl die Supports-Methode für eine angegebene Funktionalität den Wert True zurückgeben kann, wird hierdurch nicht sichergestellt, dass der Provider das Feature auf jeden Fall zur Verfügung stellen kann. Die Supports-Methode informiert nur darüber, ob der Provider die angegebene Funktionalität unterstützt oder nicht, vorausgesetzt, bestimmte Bedingungen werden eingehalten. Die Supports-Methode kann z. B. angeben, dass ein Recordset-Objekt Aktualisierungen unterstützt, selbst wenn der Cursor auf einem Mehrtabellenverbund basiert, bei dem einige Spalten nicht aktualisierbar sind.


Update-Methode (ADO)

Update-Methode

Speichert alle Änderungen, die Sie am aktuellen Datensatz eines Recordset-Objekts vornehmen.

Syntax

Recordset.Update Fields, Values

Parameter

Fields Optional. Ein Wert vom Typ Variant, der einen einzelnen Namen oder ein Variant-Array darstellt, das Namen oder Ordinalpositionen des Feldes oder der Felder abbildet, die geändert werden sollen.

Values Optional. Ein Wert vom Typ Variant, der einen einzelnen Wert oder ein Variant-Array darstellt, das Werte für das Feld oder die Felder im aktualisierten Datensatz abbildet.

Hinweise

Verwenden Sie die Update-Methode, um alle Änderungen zu speichern, die Sie am aktuellen Datensatz eines Recordset-Objekts seit dem Aufrufen der AddNew-Methode oder seit dem Ändern von beliebigen Feldwerten in einem vorhandenen Datensatz vorgenommen haben. Das Recordset-Objekt muss Aktualisierungen unterstützen.

Um die Feldwerte festzulegen, führen Sie eines der folgenden Verfahren durch:

  • Weisen Sie der Value-Eigenschaft eines Field-Objekts Werte zu, und rufen Sie die Update-Methode auf.

  • Übergeben Sie einen Feldnamen und einen Wert als Argumente mit dem Update-Aufruf.

  • Übergeben Sie ein Array mit Feldnamen und ein Array mit Werten mit dem Update-Aufruf.

Wenn Sie Arrays mit Feldern und Werten verwenden, muss in beiden Arrays die gleiche Anzahl von Elementen enthalten sein. Darüber hinaus muss die Reihenfolge der Feldnamen mit der Reihenfolge der Feldwerte übereinstimmen. Falls die Anzahl und Reihenfolge von Feldern und Werten nicht übereinstimmt, tritt ein Fehler auf.

Sollte das Recordset-Objekt Stapelaktualisierungen unterstützen, können Sie mehrere Änderungen an einem oder mehreren Datensätzen lokal zwischenspeichern, bis Sie die UpdateBatch-Methode aufrufen. Falls Sie den aktuellen Datensatz bearbeiten oder einen neuen Datensatz hinzufügen, wenn Sie die UpdateBatch-Methode aufrufen, ruft ADO automatisch die Update-Methode auf, um alle anstehenden Änderungen am aktuellen Datensatz zu speichern und dann alle Änderungen an den Provider zu übergeben.

Wenn Sie den Datensatz, den Sie hinzufügen oder bearbeiten, vor dem Aufrufen der Update-Methode verlassen, ruft ADO automatisch Update auf, um die Änderungen zu speichern. Sie müssen die CancelUpdate-Methode aufrufen, falls Sie Änderungen, die Sie am aktuellen Datensatz vorgenommen haben, abbrechen oder einen neu hinzugefügten Datensatz verwerfen möchten.

Der aktuelle Datensatz bleibt aktuell, nachdem Sie die Update-Methode aufgerufen haben.

Ist die dynamische Eigenschaft Unique Table festgelegt, und ist das Recordset-Objekt das Ergebnis eines ausgeführten Verbundvorgangs auf mehreren Tabellen, dann kann durch die Update-Methode kein Primärschlüssel dieser Tabellen aktualisiert werden. Darüber hinaus können mit der Update-Methode nur Felder in der Tabelle aktualisiert werden, die in der Unique Table-Eigenschaft angegeben ist.


UpdateBatch-Methode (ADO)

UpdateBatch-Methode

Speichert alle anstehenden Stapelaktualisierungen in der Datenbank.

Syntax

Recordset.UpdateBatch AffectRecords

Parameter

AffectRecords Optional. Ein AffectEnum-Wert, der bestimmt, wie viele Datensätze durch die UpdateBatch-Methode beeinflusst werden. Hierbei kann es sich um eine der folgenden Konstanten handeln.

Konstante | Beschreibung
adAffectCurrent | Schreibt anstehende Änderungen nur für den aktuellen Datensatz.
adAffectGroup | Schreibt anstehende Änderungen für die Datensätze, die der aktuellen Filter-Eigenschaftseinstellung entsprechen. Sie müssen die Filter-Eigenschaft auf eine der gültigen vordefinierten Konstanten festlegen, um diese Option verwenden zu können.
adAffectAll | (Voreinstellung) Schreibt anstehende Änderungen für alle Datensätze in das Recordset-Objekt, einschließlich aller durch die aktuelle Filter-Eigenschaftseinstellung verborgenen Datensätze.
adAffectAllChapters | Schreibt anstehende Änderungen für alle Kapitel.

Hinweise

Verwenden Sie die UpdateBatch-Methode, wenn Sie ein Recordset-Objekt im Stapelaktualisierungsmodus ändern, um alle Änderungen, die Sie in einem Recordset-Objekt vorgenommen haben, an die zugrunde liegende Datenbank zu übertragen.

Falls das Recordset-Objekt Stapelaktualisierungen unterstützt, können Sie mehrere Änderungen an einem oder mehreren Datensätzen lokal zwischenspeichern, bis Sie die UpdateBatch-Methode aufrufen. Falls Sie den aktuellen Datensatz bearbeiten oder einen neuen Datensatz hinzufügen, wenn Sie die UpdateBatch-Methode aufrufen, ruft ADO automatisch die Update-Methode auf, um alle anstehenden Änderungen des aktuellen Datensatzes zu speichern, und dann alle Änderungen an den Provider zu übergeben.

Anmerkung Sie sollten den Stapelaktualisierungsmodus nur mit einem Cursor vom Typ Schlüsselgruppe oder einem statischen Cursor verwenden.

Falls der Versuch, Änderungen zu übertragen, in den Datensätzen aufgrund eines Konflikts mit den zugrunde liegenden Daten scheitert (z. B., weil ein Datensatz bereits von einem anderen Benutzer gelöscht wurde), gibt der Provider Warnmeldungen an die Errors-Auflistung zurück, und ein Laufzeitfehler tritt auf. Verwenden Sie die Filter-Eigenschaft (adFilterAffectedRecords) und die Status-Eigenschaft, um festzustellen, wo sich Datensätze mit Konflikten befinden.

Verwenden Sie die CancelBatch-Methode, um alle anstehenden Stapelaktualisierungen abzubrechen.

Sind die dynamischen Eigenschaften Unique Table und Update Resync festgelegt, und ist das Recordset-Objekt das Ergebnis eines ausgeführten Verbundvorgangs auf mehreren Tabellen, dann wird nach Ausführen der UpdateBatch-Methode implizit die Resync-Methode ausgeführt. Dies hängt von den Einstellungen der Update Resync-Eigenschaft ab.


ADO-Ereignisse

ADO-Ereignisse - Zusammenfassung

Ereignis | Beschreibung
BeginTransComplete-, CommitTransComplete- und RollbackTransComplete-Methode (ConnectionEvent) | Diese Ereignisbehandlungsmethoden werden aufgerufen, nachdem die entsprechende Operation in dem Connection-Objekt beendet wurde. BeginTransComplete wird nach der BeginTrans-Operation aufgerufen. CommitTransComplete wird nach der CommitTrans-Operation aufgerufen. RollbackTransComplete wird nach der RollbackTrans-Operation aufgerufen.
ConnectComplete- und Disconnect-Methode (ConnectionEvent) | Die ConnectComplete-Methode wird aufgerufen, nachdem eine Verbindung begonnen hat. Die Disconnect-Methode wird aufgerufen, nachdem eine Verbindung beendet wurde.
EndOfRecordset-Methode (RecordsetEvent) | Die EndOfRecordset-Methode wird aufgerufen, wenn Sie sich zu einer Zeile bewegen möchten, die hinter dem Ende des Recordset-Objekts liegt.
ExecuteComplete-Methode (ConnectionEvent) | Die ExecuteComplete-Methode wird aufgerufen, nachdem die Ausführung eines Befehls beendet wurde.
FetchComplete-Methode (RecordsetEvent) | Die FetchComplete-Methode wird aufgerufen, nachdem alle Datensätze in einer länger andauernden, asynchronen Operation in das Recordset-Objekt abgerufen wurden.
FetchProgress-Methode (RecordsetEvent) | Die FetchProgress-Methode wird während einer länger andauernden, asynchronen Operation regelmäßig aufgerufen, um die Anzahl der aktuell in das Recordset-Objekt abgerufenen Zeilen anzugeben.
InfoMessage-Methode (ConnectionEvent) | Die InfoMessage-Methode wird immer dann aufgerufen, wenn während einer ConnectionEvent-Operation eine Warnung auftritt.
onError-Methode (Ereignis, RDS) | Die onError-Methode wird immer dann aufgerufen, wenn ein Fehler in einer Operation auftritt.
onReadyStateChange-Methode (Ereignis, RDS) | Diese Methode wird immer dann aufgerufen, wenn sich der Wert der ReadyState-Eigenschaft verändert.
WillChangeField- und FieldChangeComplete-Methoden (RecordsetEvent) | Die WillChangeField-Methode wird aufgerufen, bevor eine anstehende Operation den Wert eines oder mehrerer Field-Objekte in dem Recordset-Objekt verändert. Die FieldChangeComplete-Methode wird aufgerufen, nachdem sich der Wert eines oder mehrerer Field-Objekte geändert hat.
WillChangeRecord- und RecordChangeComplete-Methode (RecordsetEvent) | Die WillChangeRecord-Methode wird aufgerufen, bevor sich ein oder mehrere Datensätze (Zeilen) im Recordset-Objekt ändern. Die RecordChangeComplete-Methode wird aufgerufen, nachdem sich ein oder mehrere Datensätze geändert haben.
WillChangeRecordset- und RecordsetChangeComplete-Methoden (RecordsetEvent) | Die WillChangeRecordset-Methode wird aufgerufen, bevor eine anstehende Operation das Recordset-Objekt verändert. Die RecordsetChangeComplete-Methode wird aufgerufen, nachdem sich das Recordset-Objekt verändert hat.
WillConnect-Methode (ConnectionEvent) | Die WillConnect-Methode wird vor dem Beginn einer Verbindung aufgerufen. Die Parameter für die anstehende Verbindung werden als Eingabeparameter zur Verfügung gestellt und können geändert werden, bevor die Methode zurückgegeben wird. Diese Methode kann den Abbruch einer Anforderung der anstehenden Verbindung zurückgeben.
WillExecute-Methode (ConnectionEvent) | Die WillExecute-Methode wird unmittelbar vor dem Ausführen eines anstehenden Befehls für diese Verbindung aufgerufen. Sie bietet Benutzern die Möglichkeit, die anstehenden Ausführungsparameter zu überprüfen und zu verändern. Diese Methode kann eine Anforderung für den Abbruch des anstehenden Befehls zurückgeben
WillMove- und MoveComplete-Methoden (RecordsetEvent) | Die WillMove-Methode wird aufgerufen, bevor eine anstehende Operation die aktuelle Position im Recordset-Objekt verändert. Die MoveComplete-Methode wird aufgerufen, nachdem die aktuelle Position im Recordset-Objekt verändert wurde.


BeginTransComplete-, CommitTransComplete- und RollbackTransComplete-Methode (ADO ConnectionEvent)

BeginTransComplete-, CommitTransComplete- und RollbackTransComplete-Methode (ConnectionEvent)

Diese Ereignisbehandlungsmethoden werden aufgerufen, nachdem die entsprechende Operation in dem Connection-Objekt beendet wurde.

  • BeginTransComplete wird nach der BeginTrans-Operation aufgerufen.

  • CommitTransComplete wird nach der CommitTrans-Operation aufgerufen.

  • RollbackTransComplete wird nach der RollbackTrans-Operation aufgerufen.

Syntax

BeginTransComplete TransactionLevel, pError, adStatus, pConnection

CommitTransComplete pError, adStatus, pConnection

RollbackTransComplete pError, adStatus, pConnection

Parameter

TransactionLevel Ein Long-Wert. Enthält die neue Transaktionsebene der BeginTrans-Operation, die dieses Ereignis ausgelöst hat.

pError Ein Error-Objekt. Beschreibt den aufgetretenen Fehler, wenn EventStatusEnum den Wert adStatusErrorsOccurred hat; andernfalls ist es nicht gesetzt.

adStatus Ein EventStatusEnum-Statuswert. Beim Aufruf dieser Methoden wird dieser Parameter auf adStatusOK gesetzt, wenn die das Ereignis auslösende Operation erfolgreich war. Wenn die Operation fehlgeschlagen ist, wird der Parameter hingegen auf adStatusErrorsOccurred festgelegt.

Setzen Sie diesen Parameter auf adStatusUnwantedEvent, bevor die Methode zurückgegeben wird, um nachfolgende Benachrichtigungen zu verhindern.

pConnection Das Connection-Objekt, für das dieses Ereignis aufgetreten ist.

Hinweise

In Visual C++ können mehrere Connection-Objekte dieselbe Methode zur Ereignisbehandlung gemeinsam verwenden. Die Methode bestimmt anhand des zurückgegebenen Connection-Objekts, welches Objekt das Ereignis ausgelöst hat.

Ist die Attributes-Eigenschaft auf adXactCommitRetaining oder adXactAbortRetaining gesetzt, wird eine neue Transaktion gestartet, nachdem eine Transaktion durchgeführt oder zurückgesetzt wurde. Verwenden Sie die BeginTransComplete-Ereignisbehandlungsroutine, um alle Ereignisse außer dem ersten Ereignis beim Starten einer Transaktion zu ignorieren.


ConnectComplete- und Disconnect-Methoden (ADO ConnectionEvent)

ConnectComplete- und Disconnect-Methoden (ConnectionEvent)

Die ConnectComplete-Methode wird aufgerufen, nachdem eine Verbindung begonnen hat. Die Disconnect-Methode wird aufgerufen, nachdem eine Verbindung beendet wurde.

Syntax

ConnectComplete pError, adStatus, pConnection

Disconnect adStatus, pConnection

Parameter

pError Ein Error-Objekt. Beschreibt den aufgetretenen Fehler, wenn adStatus den Wert adStatusErrorsOccurred hat; andernfalls ist es nicht gesetzt.

adStatus Ein EventStatusEnum-Wert, der immer adStatusOK zurückgibt.

Wenn ConnectComplete aufgerufen wird, ist dieser Parameter auf adStatusCancel gesetzt, wenn eine WillConnect-Methode den Abbruch einer anstehenden Verbindung angefordert hat.

Setzen Sie diesen Parameter auf adStatusUnwantedEvent, bevor die Methode zurückgegeben wird, um nachfolgende Benachrichtigungen zu verhindern. Das Schließen und erneute Öffnen des Connection-Objekts hat jedoch zur Folge, dass diese Ereignisse erneut auftreten.

pConnection Das Connection-Objekt, für das dieses Ereignis gilt.


EndOfRecordset-Methode (ADO RecordsetEvent)

EndOfRecordset-Methode (RecordsetEvent)

Die EndOfRecordset-Methode wird aufgerufen, wenn Sie sich zu einer Zeile bewegen möchten, die hinter dem Ende des Recordset-Objekts liegt.

Syntax

EndOfRecordset fMoreData, adStatus, pRecordset

Parameter

fMoreData Ein VARIANT_BOOL-Wert. Sie können während des Verarbeitens dieses Ereignisses neue Datensätze an pRecordset anhängen. Fügen Sie Ihre Daten hinzu und setzen Sie diesen Parameter auf True, bevor EndOfRecordset zurückgegeben wird, um ein neues Ende des Recordset-Objekts anzuzeigen.

adStatus Ein EventStatusEnum-Statuswert.

Beim Aufruf von EndOfRecordset wird dieser Parameter auf adStatusOK gesetzt, wenn die das Ereignis auslösende Operation erfolgreich war. Wenn diese Methode den Abbruch dieser Operation nicht anfordern kann, wird der Parameter hingegen auf adStatusCantDeny festgelegt.

Setzen Sie diesen Parameter auf adStatusUnwantedEvent, bevor EndOfRecordset zurückgegeben wird, um nachfolgende Benachrichtigungen zu verhindern.

pRecordset Ein Recordset-Objekt. Das Recordset, für das dieses Ereignis aufgetreten ist.

Hinweise

Ein EndOfRecordset-Ereignis kann auftreten, falls die Recordset.MoveNext-Operation fehlschlägt.

Die Ereignisbehandlungsroutine wird aufgerufen, wenn Benutzer versuchen, sich hinter das Ende von pRecordset zu bewegen, beispielsweise als Folge des Aufrufs von MoveNext. In dieser Methode können Benutzer jedoch weitere Datensätze von der Datenbank abfragen und sie an das Ende von pRecordset anhängen. In diesem Fall wird der Benutzer fMoreData auf VARIANT_TRUE setzen und EndOfRecordset zurückgeben. Anschließend kann MoveNext erneut aufgerufen werden, um auf die neu abgerufenen Datensätze zuzugreifen.


ExecuteComplete-Methode (ADO ConnectionEvent)

ExecuteComplete-Methode (ConnectionEvent)

Diese Methode wird aufgerufen, nachdem die Ausführung eines Befehls beendet wurde.

Syntax

ExecuteComplete RecordsAffected, pError, adStatus, pCommand, pRecordset, pConnection

Parameter

RecordsAffected Ein Long-Wert. Die Anzahl der durch den Befehl betroffenen Datensätze.

pError Ein Error-Objekt. Beschreibt den aufgetretenen Fehler, wenn adStatus den Wert adStatusErrorsOccurred hat; andernfalls ist es nicht gesetzt.

adStatus Ein EventStatusEnum-Statuswert. Beim Aufruf dieser Methode wird dieser Parameter auf adStatusOK gesetzt, wenn die das Ereignis auslösende Operation erfolgreich war. Wenn die Operation fehlgeschlagen ist, wird der Parameter hingegen auf adStatusErrorsOccurred festgelegt.

Setzen Sie diesen Parameter auf adStatusUnwantedEvent, bevor diese Methode zurückgegeben wird, um nachfolgende Benachrichtigungen zu verhindern.

pCommand Das Command-Objekt, das ausgeführt wurde (falls vorhanden).

pRecordset Ein Recordset-Objekt. Das Ergebnis der Ausführung. Dieses Recordset-Objekt kann leer sein.

pConnection Ein Connection-Objekt. Die Verbindung, auf der der Befehl ausgeführt wurde.

Hinweise

Ein ExecuteComplete-Ereignis kann aufgrund von Connection.Execute, Command.Execute, Recordset.Open oder Recordset.NextRecordset stattfinden.


FetchComplete-Methode (ADO RecordsetEvent)

FetchComplete-Methode (RecordsetEvent)

Diese Methode wird aufgerufen, nachdem alle Datensätze in einer länger andauernden, asynchronen Operation in das Recordset-Objekt abgerufen wurden.

Syntax

FetchComplete pError, adStatus, pRecordset

Parameter

pError Ein Error-Objekt. Beschreibt den aufgetretenen Fehler, wenn adStatus den Wert adStatusErrorsOccurred hat; andernfalls ist es nicht gesetzt.

adStatus Ein EventStatusEnum-Statuswert. Beim Aufruf dieser Methode wird dieser Parameter auf adStatusOK gesetzt, wenn die das Ereignis auslösende Operation erfolgreich war. Wenn die Operation fehlgeschlagen ist, wird der Parameter hingegen auf adStatusErrorsOccurred festgelegt.

Setzen Sie diesen Parameter auf adStatusUnwantedEvent, bevor diese Methode zurückgegeben wird, um nachfolgende Benachrichtigungen zu verhindern.

pRecordset Ein Recordset-Objekt. Das Objekt, für das die Datensätze abgerufen wurden.


FetchProgress-Methode (ADO RecordsetEvent)

FetchProgress-Methode (RecordsetEvent)

Diese Methode wird während einer länger andauernden, asynchronen Operation regelmäßig aufgerufen, um die Anzahl der weiteren aktuell in das Recordset-Objekt abgerufenen Zeilen anzugeben.

Syntax

FetchProgress Progress, MaxProgress, adStatus, pRecordset

Parameter

Progress Ein Long-Wert. Die aktuelle Anzahl der von der Abrufoperation abgerufenen Datensätze.

MaxProgress Ein Long-Wert. Die maximale Anzahl von Datensätzen, die beim Abrufen erwartet wird.

adStatus Ein EventStatusEnum-Statuswert.

pRecordset Ein Recordset-Objekt. Das Objekt, für das die Datensätze abgerufen werden.


InfoMessage-Methode (ADO ConnectionEvent)

InfoMessage-Methode (ConnectionEvent)

Diese Methode wird immer dann aufgerufen, wenn während einer ConnectionEvent-Operation eine Warnung auftritt.

Syntax

InfoMessage pError, adStatus, pConnection

Parameter

pError Ein Error-Objekt. Dieser Parameter enthält alle zurückgegebenen Fehler. Wenn mehrere Fehler zurückgegeben werden, verwenden Sie die Errors-Auflistung, um die Fehler zu finden.

adStatus Ein EventStatusEnum-Statuswert. Wenn eine Warnung auftritt, wird adStatus auf adStatusOK gesetzt, und die Warnung ist im pError enthalten.

Setzen Sie diesen Parameter auf adStatusUnwantedEvent, bevor diese Methode zurückgegeben wird, um nachfolgende Benachrichtigungen zu verhindern.

pConnection Ein Connection-Objekt. Die Verbindung, bei der die Warnung auftrat. Warnungen können beispielsweise beim Öffnen eines Connection-Objekts oder beim Ausführen eines Command auf ein Connection-Objekt auftreten.


onError-Methode (Ereignis, RDS)

Diese Methode wird immer dann aufgerufen, wenn ein Fehler in einer Operation auftritt.

Syntax

onError SCode, Description, Source, CancelDisplay

Parameter

SCode Eine Ganzzahl, die den Statuscode des Fehlers enthält.

Description Eine Zeichenfolge, die eine Beschreibung des Fehlers enthält.

Source Eine Zeichenfolge, die die Abfrage oder den Befehl enthält, die/der den Fehler ausgelöst hat.

CancelDisplay Ein boolescher Wert. Ist dieser Wert auf True gesetzt, wird verhindert, dass der Fehler in einem Dialogfeld angezeigt wird.


onReadyStateChange-Methode (Ereignis, RDS)

Diese Methode wird immer dann aufgerufen, wenn sich der Wert der ReadyState-Eigenschaft verändert.

Syntax

onReadyStateChange

Parameter

Keine

Hinweise

Die ReadyState-Eigenschaft zeigt den Fortschritt eines RDS.DataControl-Objekts beim asynchronen Abrufen von Daten in sein Recordset-Objekt. Verwenden Sie die onReadyStateChange-Methode, um jede auftretende Änderung in der ReadyState-Eigenschaft zu überwachen. Dies ist effizienter, als regelmäßig den Wert der Eigenschaft zu überprüfen.


WillChangeField- und FieldChangeComplete-Methoden (ADO RecordsetEvent)

WillChangeField- und FieldChangeComplete-Methoden (RecordsetEvent)

Die WillChangeField-Methode wird aufgerufen, bevor eine anstehende Operation den Wert eines oder mehrerer Field-Objekte in dem Recordset-Objekt verändert. Die FieldChangeComplete-Methode wird aufgerufen, nachdem sich der Wert eines oder mehrerer Field-Objekte geändert hat.

Syntax

WillChangeField cFields, Fields, adStatus, pRecordset

FieldChangeComplete cFields, Fields, pError, adStatus, pRecordset

Parameter

cFields Ein Long-Wert. Die Anzahl der Field-Objekte in Fields.

Fields Ein Array mit Werten vom Typ Variant. Enthält Field-Objekte mit anstehenden Änderungen.

pError Ein Error-Objekt. Beschreibt den aufgetretenen Fehler, wenn adStatus den Wert adStatusErrorsOccurred hat; andernfalls ist es nicht gesetzt.

adStatus Ein EventStatusEnum-Statuswert.

Beim Aufruf von WillChangeField wird dieser Parameter auf adStatusOK gesetzt, wenn die das Ereignis auslösende Operation erfolgreich war. Wenn diese Methode den Abbruch der anstehenden Operation nicht anfordern kann, wird der Parameter hingegen auf adStatusCantDeny festgelegt.

Beim Aufruf von FieldChangeComplete ist dieser Parameter auf adStatusOK gesetzt, wenn die das Ereignis auslösende Operation erfolgreich war. Wenn die Operation fehlgeschlagen ist, wird der Parameter auf adStatusErrorsOccurred festgelegt.

Setzen Sie diesen Parameter auf adStatusCancel, bevor WillChangeField zurückgegeben wird, um den Abbruch der anstehenden Operation anzufordern.

Setzen Sie diesen Parameter auf adStatusUnwantedEvent, bevor FieldChangeComplete zurückgegeben wird, um nachfolgende Benachrichtigungen zu verhindern.

pRecordset Ein Recordset-Objekt. Das Recordset, für das dieses Ereignis aufgetreten ist.

Hinweise

Ein WillChangeField- oder FieldChangeComplete-Ereignis kann aufgrund der folgenden Recordset-Operationen stattfinden: Value und Update mit Array-Parametern von Feldern und Werten.


WillChangeRecord- und RecordChangeComplete-Methode (ADO RecordsetEvent)

WillChangeRecord- und RecordChangeComplete-Methode (RecordsetEvent)

Die WillChangeRecord-Methode wird aufgerufen, bevor sich ein oder mehrere Datensätze (Zeilen) im Recordset-Objekt ändern. Die RecordChangeComplete-Methode wird aufgerufen, nachdem sich ein oder mehrere Datensätze geändert haben.

Syntax

WillChangeRecord adReason, cRecords, adStatus, pRecordset

RecordChangeComplete adReason, cRecords, pError, adStatus, pRecordset

Parameter

adReason Ein EventReasonEnum-Wert. Gibt den Grund für dieses Ereignis an. Sein Wert kann adRsnAddNew, adRsnDelete, adRsnUpdate, adRsnUndoUpdate, adRsnUndoAddNew, adRsnUndoDelete oder adRsnFirstChange sein.

cRecords Ein Long-Wert. Die Anzahl der veränderten (betroffenen) Datensätze.

pError Ein Error-Objekt. Beschreibt den aufgetretenen Fehler, wenn adStatus den Wert adStatusErrorsOccurred hat; andernfalls ist es nicht gesetzt.

adStatus Ein EventStatusEnum-Statuswert.

Beim Aufruf von WillChangeRecord wird dieser Parameter auf adStatusOK gesetzt, wenn die das Ereignis auslösende Operation erfolgreich war. Wenn diese Methode den Abbruch der anstehenden Operation nicht anfordern kann, wird der Parameter hingegen auf adStatusCantDeny festgelegt.

Beim Aufruf von RecordChangeComplete wird dieser Parameter auf adStatusOK gesetzt, wenn die das Ereignis auslösende Operation erfolgreich war. Wenn die Operation fehlgeschlagen ist, wird der Parameter hingegen auf adStatusErrorsOccurred festgelegt.

Setzen Sie diesen Parameter auf adStatusCancel, bevor WillChangeRecord zurückgegeben wird, um den Abbruch der Operation anzufordern, durch die das Ereignis ausgelöst wurde.

Setzen Sie diesen Parameter auf adStatusUnwantedEvent, bevor RecordChangeComplete zurückgegeben wird, um nachfolgende Benachrichtigungen zu verhindern.

pRecordset Ein Recordset-Objekt. Das Recordset, für das dieses Ereignis aufgetreten ist.

Hinweise

Ein WillChangeRecord- oder RecordChangeComplete-Ereignis kann für das erste geänderte Feld in einer Zeile aufgrund der folgenden Recordset-Operationen stattfinden: Update, Delete, CancelUpdate, AddNew, UpdateBatch und CancelBatch. Der Wert des Recordset CursorType bestimmt, welche Operationen die Ereignisse stattfinden lassen.

Während des WillChangeRecord-Ereignisses ist die Filter-Eigenschaft des Recordset auf adFilterAffectedRecords gesetzt. Diese Eigenschaft kann während der Verarbeitung des Ereignisses nicht verändert werden.


WillChangeRecordset- und RecordsetChangeComplete-Methoden (ADO RecordsetEvent)

WillChangeRecordset- und RecordsetChangeComplete-Methoden (RecordsetEvent)

Die WillChangeRecordset-Methode wird aufgerufen, bevor eine anstehende Operation das Recordset-Objekt verändert. Die RecordsetChangeComplete-Methode wird aufgerufen, nachdem sich das Recordset-Objekt verändert hat.

Syntax

WillChangeRecordset adReason, adStatus, pRecordset

RecordsetChangeComplete adReason, pError, adStatus, pRecordset

Parameter

adReason Ein EventReasonEnum-Wert. Gibt den Grund für dieses Ereignis an. Sein Wert kann adRsnReQuery, adRsnReSynch, adRsnClose oder adRsnOpen sein.

adStatus Ein EventStatusEnum-Statuswert.

Beim Aufruf von WillChangeRecordset wird dieser Parameter auf adStatusOK gesetzt, wenn die das Ereignis auslösende Operation erfolgreich war. Wenn diese Methode den Abbruch der anstehenden Operation nicht anfordern kann, wird der Parameter hingegen auf adStatusCantDeny festgelegt.

Beim Aufruf von RecordsetChangeComplete ist dieser Parameter auf adStatusOK gesetzt, wenn die das Ereignis auslösende Operation erfolgreich war. Wenn die Operation fehlgeschlagen ist, wird der Parameter auf adStatusErrorsOccurred festgelegt, oder auf adStatusCancel, wenn die Operation abgebrochen wurde, die mit dem vorhergehenden WillChangeRecordset-Ereignis verbunden war.

Setzen Sie diesen Parameter auf adStatusCancel, bevor WillChangeRecordset zurückgegeben wird, um den Abbruch der anstehenden Operation anzufordern.

Setzen Sie diesen Parameter auf adStatusUnwantedEvent, bevor WillChangeRecordset oder RecordsetChangeComplete zurückgegeben wird, um nachfolgende Benachrichtigungen zu verhindern.

pError Ein Error-Objekt. Beschreibt den aufgetretenen Fehler, wenn adStatus den Wert adStatusErrorsOccurred hat; andernfalls ist es nicht gesetzt.

pRecordset Ein Recordset-Objekt. Das Recordset, für das dieses Ereignis aufgetreten ist.

Hinweise

Ein WillChangeRecordset- oder RecordsetChangeComplete-Ereignis kann aufgrund der folgenden Recordset-Operationen stattfinden: Requery und Open.

Wenn der Provider keine Lesezeichen unterstützt, findet eine RecordsetChange-Ereignisbenachrichtigung jedesmal dann statt, wenn vom Provider neue Zeilen abgerufen werden. Wie oft dieses Ereignis auftritt, hängt von der RecordsetCacheSize-Eigenschaft ab.


WillConnect-Methode (ADO ConnectionEvent)

WillConnect-Methode (ConnectionEvent)

Diese Methode wird vor dem Beginn einer Verbindung aufgerufen. Die Parameter für die anstehende Verbindung werden als Eingabeparameter zur Verfügung gestellt und können geändert werden, bevor die Methode zurückgegeben wird. Diese Methode kann den Abbruch einer Anforderung der anstehenden Verbindung zurückgeben.

Syntax

WillConnect ConnectionString, UserID, Password, Options, adStatus, pConnection

Parameter

ConnectionString Ein Wert vom Typ String, der Verbindungsinformationen für die anstehende Verbindung enthält.

UserID Ein Wert vom Typ String, der einen Benutzernamen für die anstehende Verbindung enthält.

Password Ein Wert vom Typ String, der ein Kennwort für die anstehende Verbindung enthält.

Options Ein Long-Wert, der anzeigt, wie der Provider ConnectionString auswerten soll. Die einzige Option ist adAsyncOpen.

adStatus Ein EventStatusEnum-Statuswert.

Beim Aufruf dieser Methode wird dieser Parameter auf adStatusOK gesetzt, wenn die das Ereignis auslösende Operation erfolgreich war. Wenn diese Methode den Abbruch einer anstehenden Operation nicht anfordern kann, wird dieser Parameter hingegen auf adStatusCantDeny festgelegt.

Setzen Sie diesen Parameter auf adStatusUnwantedEvent, bevor diese Methode zurückgegeben wird, um nachfolgende Benachrichtigungen zu verhindern. Setzen Sie diesen Parameter auf adStatusCancel, um den Abbruch der Verbindungsoperation anzufordern, die diese Methode ausgelöst hat.

pConnection Das Connection-Objekt, für das diese Ereignisbenachrichtigung gilt. Dieses Connection-Objekt kann nicht durch das WillConnect-Ereignis verändert werden.

Hinweise

Beim Aufruf dieser Methode sind die Parameter ConnectionString, UserID, Password und Options auf die Werte gesetzt, die durch die Operation vorgegeben werden, die das Ereignis ausgelöst hat.

Beim Abbruch dieser Methode wird ConnectComplete aufgerufen, wobei der adStatus-Parameter auf adStatusErrorsOccurred gesetzt ist.


WillExecute-Methode (ADO ConnectionEvent)

WillExecute-Methode (ConnectionEvent)

Diese Methode wird unmittelbar vor dem Ausführen eines anstehenden Befehls für diese Verbindung aufgerufen. Sie bietet Benutzern die Möglichkeit, die anstehenden Ausführungsparameter zu überprüfen und zu verändern. Diese Methode kann eine Anforderung für den Abbruch des anstehenden Befehls zurückgeben

Syntax

WillExecute Source, CursorType, LockType, Options, adStatus, pCommand, pRecordset, pConnection

Parameter

Source Ein Wert vom Typ String, der einen SQL-Befehl oder den Namen einer gespeicherten Prozedur enthält.

CursorType Ein CursorTypeEnum-Wert, der den Typ des Cursors für das zu öffnende Recordset enthält. Mit diesem Parameter können Sie den Cursor während einer Recordset Open-Operation zu einem beliebigen Typ ändern. CursorType wird für jede andere Operation ignoriert.

LockType Ein LockTypeEnum-Wert, der den Sperrtyp für das zu öffnende Recordset enthält. Mit diesem Parameter können Sie die Sperrung während einer Recordset Open-Operation zu einem beliebigen Typ ändern. LockType wird für jede andere Operation ignoriert.

Options Ein Long-Wert mit Optionen, mit dem der Befehl ausgeführt oder das Recordset geöffnet werden kann.

adStatus Ein EventStatusEnum-Statuswert, der bei Aufruf dieser Methode adStatusCantDeny oder adStatusOK sein kann. Ist der Wert adStatusCantDeny, kann diese Methode den Abbruch der anstehenden Operation nicht anfordern.

Setzen Sie diesen Parameter auf adStatusUnwantedEvent, bevor diese Methode zurückgegeben wird, um nachfolgende Benachrichtigungen zu verhindern. Setzen Sie den Parameter hingegen auf adStatusCancel, um den Abbruch der Operation anzufordern, durch die das Ereignis ausgelöst wurde.

pCommand Das Command-Objekt, für das diese Ereignisbenachrichtigung gilt.

pRecordset Das Recordset-Objekt, für das diese Ereignisbenachrichtigung gilt.

pConnection Das Connection-Objekt, für das diese Ereignisbenachrichtigung gilt.

Hinweise

Ein WillExecute-Ereignis kann aufgrund von Connection.Execute, Command.Execute oder Recordset.Open stattfinden. Der Parameter pConnection sollte immer einen gültigen Verweis auf ein Connection-Objekt enthalten. Wenn das Ereignis aufgrund von Connection.Execute stattfindet, werden die Parameter pRecordset und pCommand auf Nothing gesetzt. Wenn das Ereignis aufgrund von Recordset.Open stattfindet, verweist der Parameter pRecordset auf das Recordset-Objekt, und der Parameter pCommand wird auf Nothing gesetzt. Wenn das Ereignis aufgrund von Command.Execute stattfindet, verweist der Parameter pCommand auf das Command-Objekt, und der Parameter pRecordset wird auf Nothing gesetzt.


WillMove- und MoveComplete-Methode (ADO RecordsetEvent)

WillMove- und MoveComplete-Methoden (RecordsetEvent)

Die WillMove-Methode wird aufgerufen, bevor eine anstehende Operation die aktuelle Position im Recordset-Objekt verändert. Die MoveComplete-Methode wird aufgerufen, nachdem die aktuelle Position im Recordset-Objekt verändert wurde.

Syntax

WillMove adReason, adStatus, pRecordset

MoveComplete adReason, pError, adStatus, pRecordset

Parameter

adReason Ein EventReasonEnum-Wert. Gibt den Grund für dieses Ereignis an. Sein Wert kann adRsnMoveFirst, adRsnMoveLast, adRsnMoveNext, adRsnMovePrevious, adRsnMove oder adRsnRequery sein.

pError Ein Error-Objekt. Beschreibt den aufgetretenen Fehler, wenn adStatus den Wert adStatusErrorsOccurred hat; andernfalls ist es nicht gesetzt.

adStatus Ein EventStatusEnum-Statuswert.

Beim Aufruf von WillMove wird dieser Parameter auf adStatusOK gesetzt, wenn die das Ereignis auslösende Operation erfolgreich war. Wenn diese Methode den Abbruch der anstehenden Operation nicht anfordern kann, wird der Parameter hingegen auf adStatusCantDeny festgelegt.

Beim Aufruf von MoveComplete ist dieser Parameter auf adStatusOK gesetzt, wenn die das Ereignis auslösende Operation erfolgreich war. Wenn die Operation fehlgeschlagen ist, wird der Parameter hingegen auf adStatusErrorsOccurred festgelegt.

Setzen Sie diesen Parameter auf adStatusCancel, bevor WillMove zurückgegeben wird, um den Abbruch der anstehenden Operation anzufordern. Setzen Sie diesen Parameter auf adStatusUnwantedEvent, bevor MoveComplete zurückgegeben wird, um nachfolgende Benachrichtigungen zu verhindern.

pRecordset Ein Recordset-Objekt. Das Recordset, für das dieses Ereignis aufgetreten ist.

Hinweise

Ein WillMove- oder MoveComplete-Ereignis kann aufgrund der folgenden Recordset-Operationen auftreten: Open, Move, MoveFirst, MoveLast, MoveNext, MovePrevious, Bookmark, AddNew und Requery. Diese Ereignisse können aufgrund der folgenden Eigenschaften stattfinden: Filter, Index, AbsolutePage und AbsolutePosition.Diese Ereignisse finden ebenfalls statt, wenn ein Kind-Recordset verbundene Recordset-Ereignisse besitzt und das Eltern-Recordset verschoben wird.


ADO-Eigenschaften

ADO-Eigenschaften - Zusammenfassung

Eigenschaft | Beschreibung
AbsolutePage | Legt fest, auf welcher Seite der aktuelle Datensatz gespeichert ist.
AbsolutePosition | Legt die Ordinalposition des aktuellen Datensatzes eines Recordset-Objekts fest.
ActiveCommand | Bestimmt das Command-Objekt, das das zugeordnete Recordset-Objekt erstellt hat.
ActiveConnection | Zeigt an, welchem Connection-Objekt das festgelegte Command- oder Recordset-Objekt derzeit zugeordnet ist.
ActualSize | Kennzeichnet die tatsächliche Länge eines Feldwertes.
Attributes | Kennzeichnet ein oder mehrere Merkmale eines Objekts.
BOF und EOF | BOF zeigt an, dass sich die aktuelle Datensatzposition vor dem ersten Datensatz in einem Recordset-Objekt befindet. EOF zeigt an, dass sich die aktuelle Datensatzposition hinter dem letzten Datensatz in einem Recordset-Objekt befindet.
Bookmark | Gibt ein Lesezeichen zurück, das den aktuellen Datensatz in einem Recordset-Objekt eindeutig kennzeichnet oder den aktuellen Datensatz in einem Recordset-Objekt auf den Datensatz festlegt, der durch ein gültiges Lesezeichen gekennzeichnet ist.
CacheSize | Zeigt die Anzahl an Datensätzen aus einem Recordset-Objekt an, die lokal zwischengespeichert sind.
CommandText | Enthält den Text eines Befehls, der an einen Provider ausgegeben werden soll.
CommandTimeout | Zeigt an, wie lange Sie während der Ausführung eines Befehls warten müssen, bevor der Versuch abgebrochen und ein Fehler ausgelöst wird.
CommandType | Gibt den Typ eines Command-Objekts an.
Connect | Legt den Namen der Datenbank fest, in der die Abfrage- und Aktualisierungsoperationen ausgeführt werden, oder gibt diesen Namen zurück.
ConnectionString | Enthält die Informationen, die zum Einrichten einer Verbindung zu einer Datenquelle verwendet werden.
ConnectionTimeout | Zeigt an, wie lange bei der Einrichtung einer Verbindung gewartet wird, bevor der Versuch abgebrochen und ein Fehler ausgelöst wird.
Count | Gibt die Anzahl der Objekte in einer Auflistung an.
CursorLocation | Legt die Position eines Cursor Service fest oder gibt die Position zurück.
CursorType | Gibt den in einem Recordset-Objekt verwendeten Cursortyp an.
DataMember | Gibt den Namen des Datenelements an, das von dem Objekt abgerufen werden soll, auf das die DataSource-Eigenschaft verweist.
DataSource | Gibt ein Objekt an, das Daten enthält, die als Recordset-Objekt dargestellt werden.
DefaultDatabase | Gibt die Standarddatenbank für ein Connection-Objekt an.
DefinedSize | Gibt die definierte Größe eines Field-Objekts an.
Description | Beschreibt ein Error-Objekt.
Direction | Zeigt an, ob der Parameter einen Eingabeparameter, einen Ausgabeparameter oder beides darstellt bzw. ob es sich bei dem Parameter um den Rückgabewert einer gespeicherten Prozedur handelt.
EditMode | Gibt den Bearbeitungsstatus des aktuellen Datensatzes an.
ExecuteOptions (RDS) | Gibt an, ob asynchrone Ausführung aktiviert ist.
FetchOptions | Legt den Typ des asynchronen Abrufs fest oder gibt diesen Typ zurück.
Filter | Gibt einen Filter für die Daten in einem Recordset-Objekt an.
FilterColumn (RDS) | Legt eine Spalte fest, auf die die Filterkriterien angewendet werden sollen, oder gibt diese Spalte zurück.
FilterCriterion (RDS) | Legt den im Filterwert zu verwendenden Auswertungsoperator fest oder gibt diesen Operator zurück.
FilterValue (RDS) | Legt den Wert fest, mit dem die Datensätze gefiltert werden, oder gibt diesen Wert zurück.
Handler (RDS) | Legt eine Zeichenfolge fest oder gibt eine Zeichenfolge zurück, die den Namen eines serverbasierten Anpassungsprogramms (Behandlungsroutine) enthält, mit dem die Funktionalität von RDSServer.DataFactory sowie alle durch die Behandlungsroutine verwendeten Parameter erweitert werden. Dabei müssen die einzelnen Elemente durch Kommas (",") voneinander getrennt werden.
HelpContext und HelpFile | Gibt Hilfedatei und Hilfethema zu einem bestimmten Error-Objekt an. HelpContextID - gibt eine Kontext-ID als Long-Wert für ein Thema in einer Hilfedatei zurück. HelpFile - Gibt einen Wert vom Typ String zurück, der einen vollständig aufgeschlüsselten Pfad zu einer Hilfedatei ergibt.
Index | Gibt den Namen des derzeit gültigen Indexes für einRecordset-Objekt an.
InternetTimeout (RDS) | Zeigt die Anzahl an Millisekunden an, die bis zum Ablaufen des Zeitlimits einer Anforderung vergehen.
IsolationLevel | Zeigt die Isolierungsebene für ein Connection-Objekt an.
LockType | Zeigt die Art der Sperrung an, die während des Bearbeitens auf Datensätze gelegt werden.
MarshalOptions | Gibt an, welche Datensätze durch Marshaling an den Server zurückgegeben werden.
MaxRecords | Gibt die maximale Anzahl an Datensätzen an, die aus einer Abfrage an ein Recordset-Objekt zurückgegeben werden.
Mode | Gibt die verfügbaren Berechtigungen für das Ändern von Daten in einem Connection-Objekt an.
Name | Gibt den Namen eines Objekts an.
NativeError | Gibt den providerspezifischen Fehlercode für ein gegebenes Error-Objekt an.
Number | Gibt die Nummer an, durch die ein Error-Objekt eindeutig gekennzeichnet wird.
NumericScale | Gibt die Skalierung der numerischen Werte in einem Parameter- oder Field-Objekt an.
Optimize | Gibt an, ob über diesem Feld ein Index erstellt werden soll.
OriginalValue | Gibt den Wert eines Field-Objekts an, bevor Änderungen vorgenommen wurden.
PageCount | Gibt an, wie viele Datenseiten das Recordset-Objekt enthält.
PageSize | Gibt an, aus wie vielen Datensätzen eine Seite im Recordset-Objekt besteht.
Precision | Gibt den Genauigkeitsgrad für die numerischen Werte in einem Parameter-Objekt oder für numerische Field-Objekte an.
Prepared | Gibt an, ob eine kompilierte Version eines Befehls vor dessen Ausführung gespeichert werden soll.
Provider | Gibt den Namen des Providers für ein Connection-Objekt an.
RecordCount | Gibt die aktuelle Anzahl von Datensätzen in einem Recordset-Objekt an.
Recordset and SourceRecordset (RDS) | Gibt das ADOR.Recordset-Objekt an, das von einem benutzerdefinierten Geschäftsobjekt zurückgegeben wird.
ReadyState (RDS) | Gibt den Fortschritt eines RDS.DataControl-Objekts beim Abrufen von Daten in das dazugehörige Recordset-Objekt wieder.
Server (RDS) | Legt den Namen für Internet Information Server (IIS) und das Kommunikationsprotokoll fest oder gibt diese Angaben zurück.
Size | Gibt die maximale Größe eines Parameter-Objekts in Bytes oder Zeichen an.
Sort | Gibt einen oder mehrere Feldnamen an, nach denen die Sortierung im Recordset-Objekt durchgeführt wird. Außerdem wird angegeben, ob die einzelnen Felder in aufsteigender oder absteigender Reihenfolge sortiert werden.
SortColulmn (RDS) | Legt die Spalte fest, nach der die Datensätze sortiert werden, oder gibt diese Spalte zurück.
SortDirection (RDS) | Legt einen booleschen Wert fest oder gibt diesen Wert zurück. Dieser Wert gibt an, ob es sich um eine aufsteigende oder absteigende Sortierung handelt.
Source (ADO Error) | Gibt den Namen des Objekts oder der Anwendung an, das/die ursprünglich einen Fehler ausgelöst hat.
Source (ADO Recordset) | Gibt die Quelle der Daten in einem Recordset-Objekt an (Command-Objekt, SQL-Anweisung, Tabellenname oder gespeicherte Prozedur).
SQL (RDS) | Setzt die Abfragezeichenfolge, die zum Abrufen des Recordset-Objekts verwendet wird, oder gibt diese zurück.
SQLState | Gibt den SQL-Zustand für ein gegebenes Error-Objekt an.
State | Beschreibt für alle anwendbaren Objekte, ob der Status des Objekts geöffnet oder geschlossen ist. Beschreibt für ein Recordset-Objekt, das eine asynchrone Methode ausführt, ob der aktuelle Status des Objekts 'verbindend', 'ausführend' oder 'abrufend' ist.
Status | Gibt den Status des aktuellen Datensatzes in Bezug auf Stapelaktualisierungen oder andere umfangreiche Vorgänge an.
StayInSync | Gibt in einem hierarchischen Recordset-Objekt an, ob der Verweis auf die zugrunde liegenden untergeordneten Datensätze (d. h. ein Kapitel) sich ändert, wenn die Position der übergeordneten Zeile sich ändert.
Type | Gibt den Operationstyp oder Datentyp eines Parameter-, Field- oder Property-Objekts an.
UnderlyingValue | Gibt den aktuellen Wert eines Field-Objekts in der Datenbank an.
Value | Gibt den Wert an, der einem Field-, Parameter- oder Property-Objekt zugewiesen ist.
Version | Gibt die ADO-Versionsnummer an.


AbsolutePage-Eigenschaft (ADO)

AbsolutePage-Eigenschaft

Legt fest, auf welcher Seite der aktuelle Datensatz gespeichert ist.

Einstellungen und Rückgabewerte

Legt einen Long-Wert zwischen 1 und der Anzahl der Seiten im Recordset-Objekt (PageCount) fest bzw. gibt diesen Wert zurück, oder gibt eine der folgenden Konstanten zurück.

Konstante | Beschreibung
adPosUnknown | Das Recordset-Objekt ist leer, die aktuelle Position ist unbekannt, oder der Provider unterstützt die AbsolutePage-Eigenschaft nicht.
adPosBOF | Der aktuelle Datensatzzeiger befindet sich bei BOF (d. h. die BOF-Eigenschaft besitzt den Wert True).
adPosEOF | Der aktuelle Datensatzzeiger befindet sich bei EOF (d. h. die EOF-Eigenschaft besitzt den Wert True).

Hinweise

Verwenden Sie die AbsolutePage-Eigenschaft, um die Seite festzulegen, auf der sich der aktuelle Datensatz befindet. Verwenden Sie die PageSize-Eigenschaft, um das Recordset-Objekt logisch in eine Folge von Seiten aufzuteilen, von denen jede die Anzahl von Datensätzen beinhaltet, die in PageSize definiert ist (mit Ausnahme der letzten Seite, die weniger Datensätze enthalten kann). Der Provider muss die entsprechende Funktionalität für diese Eigenschaft unterstützen, damit sie zur Verfügung steht.

Wie die AbsolutePosition-Eigenschaft startet die AbsolutePage mit 1 und entspricht 1, wenn es sich bei dem aktuellen Datensatz um den ersten Datensatz im Recordset-Objekt handelt. Legen Sie diese Eigenschaft fest, um zum ersten Datensatz einer bestimmten Seite zu wechseln. Sie erhalten die Gesamtzahl von Seiten aus der PageCount-Eigenschaft.


AbsolutePosition-Eigenschaft (ADO)

AbsolutePosition-Eigenschaft

Legt die Ordinalposition des aktuellen Datensatzes eines Recordset-Objekts fest.

Einstellungen und Rückgabewerte

Legt einen Long-Wert zwischen 1 und der Anzahl der Datensätze im Recordset-Objekt (RecordCount) fest bzw. gibt diesen Wert zurück, oder gibt eine der folgenden Konstanten zurück.

Konstante | Beschreibung
adPosUnknown | Das Recordset-Objekt ist leer, die aktuelle Position ist unbekannt, oder der Provider unterstützt die AbsolutePosition-Eigenschaft nicht.
adPosBOF | Der aktuelle Datensatzzeiger befindet sich bei BOF (d. h. die BOF-Eigenschaft besitzt den Wert True).
adPosEOF | Der aktuelle Datensatzzeiger befindet sich bei EOF (d. h. die EOF-Eigenschaft besitzt den Wert True).

Hinweise

Verwenden Sie die AbsolutePosition-Eigenschaft, um zu einem auf seiner Ordinalposition im Recordset-Objekt basierenden Datensatz zu wechseln oder um die Ordinalposition des aktuellen Datensatzes zu bestimmen. Der Provider muss die entsprechende Funktionalität für diese Eigenschaft unterstützen, damit sie zur Verfügung steht.

Wie die AbsolutePage-Eigenschaft startet auch AbsolutePosition mit 1 und entspricht 1, wenn es sich bei dem aktuellen Datensatz um den ersten Datensatz im Recordset-Objekt handelt. Sie können die Gesamtzahl an Datensätzen im Recordset-Objekt aus der RecordCount-Eigenschaft abrufen.

Wenn Sie die AbsolutePosition-Eigenschaft festlegen, lädt ADO, selbst wenn sie sich auf einen Datensatz im aktuellen Zwischenspeicher bezieht, den Zwischenspeicher erneut mit einer neuen Gruppe von Datensätzen, wobei der Vorgang bei dem festgelegten Datensatz beginnt. Die CacheSize-Eigenschaft bestimmt die Größe dieser Gruppe.

Anmerkung Sie sollten die AbsolutePosition-Eigenschaft nicht als Ersatz für eine Datensatznummer verwenden. Die Position eines gegebenen Datensatzes ändert sich, wenn Sie einen vorhergehenden Datensatz löschen. Es gibt außerdem keine Garantie, dass ein gegebener Datensatz dieselbe AbsolutePosition-Eigenschaft behält, falls das Recordset-Objekt erneut abgefragt oder geöffnet wird. Lesezeichen sind weiterhin die empfohlene Lösung für das Beibehalten und Zurückgeben einer gegebenen Position. Sie stellen die einzige Möglichkeit dar, eine Positionierung in allen Typen von Recordset-Objekten vorzunehmen.


ActiveCommand-Eigenschaft (ADO)

ActiveCommand-Eigenschaft

Bestimmt das Command-Objekt, welches das zugeordnete Recordset-Objekt erstellt hat.

Rückgabewert

Gibt einen Wert vom Typ Variant zurück, der ein Command-Objekt enthält. Die Voreinstellung ist ein Null-Objektverweis.

Hinweise

Die ActiveCommand-Eigenschaft ist schreibgeschützt.

Verwenden Sie die AbsolutePage-Eigenschaft, um die Seite festzulegen, auf der sich der aktuelle Datensatz befindet.

Verwenden Sie diese Eigenschaft zum Suchen des zugeordneten Command-Objekts, wenn Ihnen nur das resultierende Recordset-Objekt zur Verfügung steht.


ActiveConnection-Eigenschaft (ADO)

ActiveConnection-Eigenschaft

Zeigt an, welchem Connection-Objekt das festgelegte Command- oder Recordset-Objekt derzeit zugeordnet ist.

Einstellungen und Rückgabewerte

Legt einen Wert vom Typ String fest, der die Definition für eine Verbindung oder ein Connection-Objekt enthält, oder gibt diesen Wert zurück. Die Voreinstellung ist ein Null-Objektverweis.

Hinweise

Verwenden Sie die ActiveConnection-Eigenschaft, um das Connection-Objekt zu bestimmen, über das das festgelegte Command-Objekt ausgeführt oder das festgelegte Recordset-Objekt geöffnet wird.

Befehl

Bei Command-Objekten bietet die ActiveConnection-Eigenschaft Schreib-/Lesezugriff.

Wenn Sie versuchen, die Execute-Methode in einem Command-Objekt aufzurufen, bevor Sie diese Eigenschaft für ein geöffnetes Connection-Objekt oder eine gültige Verbindungszeichenfolge festlegen, tritt ein Fehler auf.

Microsoft Visual Basic Das Setzen der ActiveConnection-Eigenschaft auf Nothing trennt das Command-Objekt vom aktuellen Connection-Objekt und veranlasst den Provider, alle zugeordneten Ressourcen in der Datenquelle freizugeben. Sie können das Command-Objekt dann demselben oder einem anderen Connection-Objekt zuordnen. Einige Provider ermöglichen das Ändern der Eigenschaftseinstellung von einem Connection-Objekt auf ein anderes, ohne dass die Eigenschaft zunächst auf Nothing festgelegt werden muss.

Falls die Parameters-Auflistung des Command-Objekts Parameter enthält, die vom Provider geliefert wurden, wird die Auflistung gelöscht, wenn Sie die ActiveConnection-Eigenschaft auf Nothing oder auf ein anderes Connection-Objekt setzen. Falls Sie die Parameter-Objekte manuell erstellen und zum Ausfüllen der Parameters-Auflistung des Command-Objekts verwenden, bleibt die Parameters-Auflistung beim Festlegen der ActiveConnection-Eigenschaft auf Nothing oder auf ein anderes Connection-Objekt intakt.

Das Schließen des Connection-Objekts, mit dem ein Command-Objekt verbunden ist, setzt die ActiveConnection-Eigenschaft auf Nothing. Das Setzen dieser Eigenschaft auf ein geschlossenes Connection-Objekt löst einen Fehler aus.

Recordset

Für geöffnete Recordset-Objekte oder für Recordset-Objekte, deren Source-Eigenschaft auf ein gültiges Command-Objekt gesetzt ist, ist die ActiveConnection-Eigenschaft schreibgeschützt. Andernfalls bietet sie Schreib-/Lesezugriff.

Sie können diese Eigenschaft auf ein gültiges Connection-Objekt oder auf eine gültige Verbindungszeichenfolge festlegen. Im letzteren Fall erstellt der Provider unter Verwendung dieser Definition ein neues Connection-Objekt und öffnet die Verbindung. Darüber hinaus kann der Provider dieser Eigenschaft auf das neue Connection-Objekt setzen, um eine Möglichkeit zu bieten, auf das Connection-Objekt zum Abrufen erweiterter Fehlerinformationen zuzugreifen oder um andere Befehle auszuführen.

Wenn Sie das ActiveConnection-Argument der Open-Methode zum Öffnen eines Recordset-Objekts verwenden, übernimmt die ActiveConnection-Eigenschaft den Wert des Arguments.

Wenn Sie die Source-Eigenschaft des Recordset-Objekts auf eine gültige Command-Objektvariable setzen, übernimmt die ActiveConnection-Eigenschaft des Recordset-Objekts die Einstellung der ActiveConnection-Eigenschaft des Command-Objekts.

Verwenden von Remote Data Service In einem clientbasierten (ADOR) Recordset-Objekt kann diese Eigenschaft nur auf eine Verbindungszeichenfolge oder (bei Microsoft Visual Basic oder VBScript) auf Nothing festgelegt werden.


ActualSize-Eigenschaft (ADO)

ActualSize-Eigenschaft

Kennzeichnet die tatsächliche Länge eines Feldwertes.

Einstellungen und Rückgabewerte

Gibt einen Long-Wert zurück. Einige Provider lassen unter Umständen das Setzen dieser Eigenschaft zu, um Speicherplatz für BLOB-Daten zu reservieren. In diesem Fall ist der Standardwert 0.

Hinweise

Verwenden Sie die ActualSize-Eigenschaft, um die tatsächliche Länge des Wertes eines Field-Objekts zurückzugeben. Die ActualSize-Eigenschaft ist für alle Felder schreibgeschützt. Falls ADO die Länge des Wertes des Field-Objekts nicht bestimmen kann, gibt die ActualSize-Eigenschaft adUnknown zurück.

Die ActualSize- und die DefinedSize-Eigenschaften sind verschieden, wie das folgende Beispiel zeigt: Ein Field-Objekt mit einem deklarierten adVarChar-Typ und einer maximalen Länge von 50 Zeichen gibt einen DefinedSize-Eigenschaftswert von 50 zurück. Der zurückgegebene ActualSize-Eigenschaftswert entspricht jedoch der Länge der Daten, die in dem Feld für den aktuellen Datensatz gespeichert sind.


Attributes-Eigenschaft (ADO)

Attributes-Eigenschaft

Kennzeichnet ein oder mehrere Merkmale eines Objekts.

Einstellungen und Rückgabewerte

Legt einen Long-Wert fest oder gibt diesen zurück.

Bei einem Connection-Objekt ist die Attributes-Eigenschaft auf Schreib-/Lesezugriff festgelegt. Ihr Wert kann die Summe aus einem oder mehreren XactAttributeEnum-Werten sein (Voreinstellung ist Null).

Konstante | Beschreibung
adXactCommitRetaining | Führt zurückgehaltene Bestätigungen aus, d. h., das Aufrufen von CommitTrans startet automatisch eine neue Transaktion. Wird nicht von allen Providern unterstützt.
adXactAbortRetaining | Führt zurückgehaltene Abbrüche aus, d. h., das Aufrufen von RollbackTrans startet automatisch eine neue Transaktion. Wird nicht von allen Providern unterstützt.

Bei einem Parameter-Objekt bietet die Attributes-Eigenschaft Schreib-/Lesezugriff. Ihr Wert kann die Summe aus einem oder mehreren dieser ParameterAttributesEnum-Werte sein.

Konstante | Beschreibung
adParamSigned | Voreinstellung. Zeigt an, dass der Parameter Werte mit Vorzeichen akzeptiert.
AdParamNullable | Zeigt an, dass der Parameter Null-Werte akzeptiert.
AdParamLong | Zeigt an, dass der Parameter lange Binärdaten akzeptiert.

Bei einem Field-Objekt bietet die Attributes-Eigenschaft Schreib-/Lesezugriff. Ihr Wert kann die Summe aus einem oder mehreren dieser FieldAttributeEnum-Werte sein.

Konstante | Beschreibung
adFldMayDefer | Zeigt an, dass das Feld aufgeschoben ist, d. h., die Feldwerte werden nicht mit dem gesamten Datensatz aus der Datenquelle abgerufen, es sei denn, Sie greifen explizit darauf zu.
AdFldUpdatable | Zeigt an, dass Sie in das Feld schreiben können.
AdFldUnknownUpdatable | Zeigt an, dass der Provider nicht erkennen kann, ob Sie in das Feld schreiben können.
AdFldFixed | Zeigt an, dass das Feld Daten mit fester Länge enthält.
AdFldIsNullable | Zeigt an, dass das Feld Null-Werte akzeptiert.
AdFldMayBeNull | Zeigt an, dass Sie Null-Werte aus dem Feld lesen können.
AdFldLong | Zeigt an, dass es sich bei dem Feld um ein langes Binärfeld handelt. Gibt außerdem an, dass die AppendChunk- und GetChunk-Methoden verwendet werden können.
adFldRowID | Zeigt an, dass das Feld einen beständigen Zeilenbezeichner enthält, auf den nicht geschrieben werden kann und dessen einzige Aufgabe im Erkennen der Zeile besteht (wie z. B. eine Datensatznummer, einen eindeutigen Bezeichner usw.).
adFldRowVersion | Zeigt an, dass das Feld einen Zeit- oder Datumsstempel enthält, mit dem Aktualisierungen überwacht werden.
adFldCacheDeferred | Zeigt an, dass der Provider Feldwerte zwischenspeichert und nachfolgende Lesezugriffe aus dem Zwischenspeicher erfolgen.

Bei einem Property-Objekt bietet die Attributes-Eigenschaft Schreib-/Lesezugriff. Ihr Wert kann die Summe aus einem oder mehreren dieser PropertyAttributesEnum-Werte sein:

Konstante | Beschreibung
adPropNotSupported | Gibt an, dass der Provider die Eigenschaft nicht unterstützt.
adPropRequired | Zeigt an, dass Sie einen Wert für diese Eigenschaft festlegen müssen, bevor die Datenquelle initialisiert wird.
adPropOptional | Zeigt an, dass Sie keinen Wert für diese Eigenschaft festlegen müssen, bevor die Datenquelle initialisiert wird.
adPropRead | Zeigt an, dass Sie die Eigenschaft lesen können.
adPropWrite | Zeigt an, dass Sie die Eigenschaft festlegen können.

Hinweise

Verwenden Sie die Attributes-Eigenschaft, um die Merkmale des Connection-, Parameter-, Field- oder Property-Objekts festzulegen bzw. zurückzugeben.

Wenn Sie mehrere Attribute festlegen, können Sie die entsprechenden Konstanten addieren. Wenn Sie den Eigenschaftswert auf eine Summe festlegen, die nicht kompatible Konstanten enthält, tritt ein Fehler auf.

Verwenden von Remote Data Service Diese Eigenschaft steht in einem clientseitigen Connection-Objekt nicht zur Verfügung.


BOF- und EOF-Eigenschaften (ADO)

BOF- und EOF-Eigenschaften

  • BOF zeigt an, dass sich die aktuelle Datensatzposition vor dem ersten Datensatz in einem Recordset-Objekt befindet.

  • EOF zeigt an, dass sich die aktuelle Datensatzposition hinter dem letzten Datensatz in einem Recordset-Objekt befindet.

Rückgabewert

Die BOF- und EOF-Eigenschaften geben boolesche Werte zurück.

Hinweise

Verwenden Sie die BOF- und EOF-Eigenschaften, um zu bestimmen, ob ein Recordset-Objekt Datensätze enthält oder ob Sie die Grenzen eines Recordset-Objekts überschreiten, wenn Sie von Datensatz zu Datensatz wechseln.

Die BOF-Eigenschaft gibt den Wert True (-1) zurück, wenn sich die aktuelle Datensatzposition vor dem ersten Datensatz befindet. Wenn sich die aktuelle Datensatzposition an oder hinter dem ersten Datensatz befindet, wird False (0) zurückgegeben.

Die EOF-Eigenschaft gibt True zurück, wenn die aktuelle Position des Datensatzes nach dem letzten Datensatz ist und False wenn die aktuelle Position des Datensatzes auf oder vor dem letzten Datensatz ist.

Wenn entweder die BOF- oder die EOF-Eigenschaft den Wert True besitzt, ist kein aktueller Datensatz vorhanden.

Wenn Sie ein Recordset-Objekt öffnen, das keine Datensätze enthält, werden die BOF- und die EOF-Eigenschaft auf den Wert True gesetzt, und die RecordCount-Eigenschaftseinstellung des Recordset-Objekts ist Null. Wenn Sie ein Recordset-Objekt öffnen, das mindestens einen Datensatz enthält, ist der erste Datensatz der aktuelle Datensatz, und die BOF- und die EOF-Eigenschaft besitzen den Wert False.

Wenn Sie den letzten verbleibenden Datensatz im Recordset-Objekt löschen, behalten die BOF- und die EOF-Eigenschaft gegebenenfalls so lange den Wert False, bis Sie versuchen, den aktuellen Datensatz neu zu platzieren.

Diese Tabelle zeigt, welche Move-Methoden mit verschiedenen Kombinationen der BOF- und der EOF-Eigenschaft zulässig sind.

 | MoveFirst, MoveLast | MovePrevious, Move < 0 | Move 0 | MoveNext, Move > 0
BOF=True, EOF=False | Zulässig | Fehler | Fehler | Zulässig
BOF=False, EOF=True | Zulässig | Zulässig | Fehler | Fehler
Beide True | Fehler | Fehler | Fehler | Fehler
Beide False | Zulässig | Zulässig | Zulässig | Zulässig

Durch das Zulassen einer Move-Methode wird nicht gewährleistet, dass ein Datensatz gefunden wird. Es bedeutet lediglich, dass das Aufrufen der angegebenen Move-Methode keinen Fehler auslöst.

Die folgende Tabelle zeigt, wie sich die BOF- und EOF-Eigenschaftseinstellungen verhalten, wenn Sie verschiedene Move-Methoden aufrufen, Sie jedoch keinen Datensatz ermitteln können.

 | BOF | EOF
MoveFirst, MoveLast | Auf True gesetzt | Auf True gesetzt
Move 0 | Keine Änderung | Keine Änderung
MovePrevious, Move < 0 | Auf True gesetzt | Keine Änderung
MoveNext, Move > 0 | Keine Änderung | Auf True gesetzt


Bookmark-Eigenschaft (ADO)

Bookmark-Eigenschaft

Gibt ein Lesezeichen zurück, das den aktuellen Datensatz in einem Recordset-Objekt eindeutig kennzeichnet oder den aktuellen Datensatz in einem Recordset-Objekt auf den Datensatz festlegt, der durch ein gültiges Lesezeichen gekennzeichnet ist.

Einstellungen und Rückgabewerte

Legt einen Variant-Ausdruck fest, der ein gültiges Lesezeichen ergibt, oder gibt diesen Ausdruck zurück.

Hinweise

Verwenden Sie die Bookmark-Eigenschaft, um die Position des aktuellen Datensatzes zu speichern und zu einem beliebigen Zeitpunkt an diesen Datensatz zurückzugehen. Lesezeichen stehen nur in den Recordset-Objekten zur Verfügung, die die Lesezeichenfunktionalität unterstützen.

Wenn Sie ein Recordset-Objekt öffnen, besitzen alle darin enthaltenen Datensätze ein eindeutiges Lesezeichen. Sie speichern das Lesezeichen für den aktuellen Datensatz, indem Sie den Wert der Bookmark-Eigenschaft einer Variablen zuweisen. Nach dem Wechseln zu einem anderen Datensatz können Sie jederzeit schnell zu diesem Datensatz zurückzukehren; legen Sie dazu die Bookmark-Eigenschaft des Recordset-Objekts auf den Wert dieser Variablen fest.

Der Wert des Lesezeichens kann u. U. nicht angezeigt werden. Lesezeichen sind außerdem nicht unbedingt direkt vergleichbar - zwei Lesezeichen, die sich auf denselben Datensatz beziehen, können etwa unterschiedliche Werte haben.

Wenn Sie zum Erstellen einer Kopie eines Recordset-Objekts die Clone-Methode verwenden, sind die Bookmark-Eigenschaftseinstellungen für das Original und das Duplikat des Recordset-Objekts identisch und austauschbar. Sie können Lesezeichen von verschiedenen Recordset-Objekten jedoch nicht austauschen, selbst wenn sie aus derselben Quelle oder demselben Befehl erstellt wurden.

Verwenden von Remote Data Service Die Bookmark-Eigenschaft steht in einem clientbasierten (ADOR) Recordset-Objekt immer zur Verfügung.


CacheSize-Eigenschaft (ADO)

CacheSize-Eigenschaft

Zeigt die Anzahl an Datensätzen aus einem Recordset-Objekt an, die lokal zwischengespeichert sind.

Einstellungen und Rückgabewerte

Legt einen Long-Wert fest, der größer als 0 sein muss, oder gibt diesen Wert zurück. Die Voreinstellung ist 1.

Hinweise

Mit der CacheSize-Eigenschaft können Sie steuern, wie viele Datensätze im Puffer des Providers verbleiben und wie viele Datensätze gleichzeitig in den lokalen Speicher geladen werden. Falls die CacheSize-Eigenschaft auf 10 festgelegt ist, ruft der Provider nach dem ersten Öffnen des Recordset-Objekts die ersten 10 Datensätze in den lokalen Speicher ab. Während Sie sich durch das Recordset-Objekt bewegen, gibt der Provider die Daten aus dem lokalen Pufferspeicher zurück. Sobald Sie sich über den letzten Datensatz im Zwischenspeicher hinaus bewegen, ruft der Provider die nächsten 10 Datensätze aus der Datenquelle in den Zwischenspeicher ab.

Der Wert dieser Eigenschaft kann während der Existenz des Recordset-Objekts angepasst werden. Das Ändern dieses Wertes beeinflusst jedoch nur die Anzahl der Datensätze im Zwischenspeicher nach den folgenden Abrufen aus der Datenquelle. Das Ändern des Eigenschaftswertes allein ändert den aktuellen Inhalt des Zwischenspeichers nicht.

Wenn weniger Datensätze als in CacheSize angegeben abrufbar sind, gibt der Provider die verbleibenden Datensätze zurück. Es tritt kein Fehler auf.

Das Setzen von CacheSize auf Null ist nicht zulässig; es wird ein Fehler zurückgegeben.

Aus dem Zwischenspeicher abgerufene Datensätze spiegeln nicht die gleichzeitigen Änderungen wider, die andere Personen an den Quelldaten vornehmen. Um eine Aktualisierung aller zwischengespeicherten Daten zu erreichen, verwenden Sie die Resync-Methode.


CommandText-Eigenschaft (ADO)

CommandText-Eigenschaft

Enthält den Text eines Befehls, der an einen Provider ausgegeben werden soll.

Einstellungen und Rückgabewerte

Legt einen String-Wert fest oder gibt diesen Wert zurück, der einen Providerbefehl enthält, wie z. B. eine SQL-Anweisung, einen Tabellennamen oder den Aufruf einer gespeicherten Prozedur. Die Voreinstellung ist "" (Zeichenfolge mit Nulllänge).

Hinweise

Verwenden Sie die CommandText-Eigenschaft, um den Text eines Command-Objekts festzulegen oder zurückzugeben. Hierbei handelt es sich normalerweise um eine SQL-Anweisung. Es ist jedoch auch jede andere Art von Befehlsanweisung möglich, die durch den Provider erkannt wird (z. B. der Aufruf einer gespeicherten Prozedur). Eine SQL-Anweisung muss in dem bestimmten Dialekt bzw. der Version erstellt werden, die durch den Abfrageprozessor des Providers unterstützt wird.

Falls die Prepared-Eigenschaft des Command-Objekts auf den Wert True gesetzt und das Command-Objekt an eine geöffnete Verbindung gebunden ist, wenn Sie die CommandText-Eigenschaft festlegen, bereitet ADO die Abfrage vor (d. h. eine kompilierte Version der Abfrage wird durch den Provider gespeichert), wenn Sie die Execute- oder Open-Methode aufrufen.

Abhängig von der CommandType-Eigenschaftseinstellung kann ADO die CommandText-Eigenschaft ändern. Sie können die CommandText-Eigenschaft zu jedem beliebigen Zeitpunkt lesen, um den aktuellen Befehlstext anzuzeigen, den ADO während der Ausführung verwendet.


CommandTimeout-Eigenschaft (ADO)

CommandTimeout-Eigenschaft

Zeigt an, wie lange Sie während der Ausführung eines Befehls warten müssen, bevor der Versuch abgebrochen und ein Fehler ausgelöst wird.

Einstellungen und Rückgabewerte

Legt einen Long-Wert fest oder gibt diesen Wert zurück. Dieser Wert zeigt in Sekunden an, wie lange auf die Ausführung eines Befehls gewartet wird. Die Voreinstellung ist 30.

Hinweise

Verwenden Sie die CommandTimeout-Eigenschaft in einem Connection- oder Command-Objekt, um den Abbruch eines Execute-Methodenaufrufs aufgrund netzwerkbedingter Verzögerungen oder starker Serverbeanspruchung zuzulassen. Wenn das in der CommandTimeout-Eigenschaft festgelegte Intervall abläuft, bevor die Befehlsausführung beendet ist, tritt ein Fehler auf und ADO bricht den Befehl ab. Wenn Sie die Eigenschaft auf Null festlegen, wartet ADO bis die Ausführung abgeschlossen ist. Stellen Sie sicher, dass der Provider und die Datenquelle, für die Sie Code schreiben, die CommandTimeout-Funktionalität unterstützen.

Die CommandTimeout-Einstellung in einem Connection-Objekt hat keinen Einfluss auf die CommandTimeout-Einstellung in einem Command-Objekt desselben Connection-Objekts. Dies bedeutet, dass die CommandTimeout-Eigenschaft des Command-Objekts den CommandTimeout-Wert des Connection-Objekts nicht übernimmt.

In einem Connection-Objekt bietet die CommandTimeout-Eigenschaft weiterhin Schreib-/Lesezugriff, nachdem das Connection-Objekt geöffnet wurde.


CommandType-Eigenschaft (ADO)

CommandType-Eigenschaft

Gibt den Typ eines Command-Objekts an.

Einstellungen und Rückgabewerte

Legt einen der folgenden CommandTypeEnum-Werte fest oder gibt einen der folgenden Werte zurück.

Konstante | Beschreibung
adCmdText | Wertet CommandText als Textdefinition eines Befehls oder als Aufruf einer gespeicherten Prozedur aus.
adCmdTable | Wertet CommandText als Tabellennamen aus, dessen Spalten vollzählig von einer intern generierten SQL-Abfrage zurückgegeben werden.
adCmdTableDirect | Wertet CommandText als Tabellennamen aus, dessen Spalten vollzählig zurückgegeben werden.
adCmdStoredProc | Wertet CommandText als Namen einer gespeicherten Prozedur aus.
adCmdUnknown | Voreinstellung. Der Befehlstyp in der CommandText-Eigenschaft ist nicht bekannt.
adCmdFile | Wertet CommandText als Dateinamen eines beständigen Recordset-Objekts aus.
adExecuteNoRecords | Gibt an, dass es sich bei CommandText um einen Befehl oder eine gespeicherte Prozedur handelt, der bzw. die keine Zeilen zurückgibt (z. B. ein Befehl zum Einfügen von Daten). Werden Zeilen abgerufen, werden diese verworfen und nicht zurückgegeben. Wird immer mit adCmdText oder adCmdStoredProc kombiniert.

Hinweise

Verwenden Sie die CommandType-Eigenschaft, um die Auswertung der CommandText-Eigenschaft zu optimieren.

Falls der CommandType-Eigenschaftswert dem Wert adCmdUnknown (der Standardwert) entspricht, werden Sie u. U. eine verminderte Leistung feststellen, da ADO Aufrufe an den Provider durchführen muss, um zu bestimmen, ob es sich bei der CommandText-Eigenschaft um eine SQL-Anweisung, eine gespeicherte Prozedur oder einen Tabellennamen handelt. Wenn Ihnen der verwendete Befehlstyp bekannt ist, weist das Festlegen der CommandType-Eigenschaft ADO an, direkt zum entsprechenden Code zu springen. Wenn die CommandType-Eigenschaft nicht mit dem Befehlstyp in der CommandText-Eigenschaft übereinstimmt, tritt beim Aufrufen der Execute-Methode ein Fehler auf.

Die adExecuteNoRecords-Konstante minimiert die internen Verarbeitungsvorgänge und verbessert daher die Leistung. Diese Konstante kommt nie einzeln vor, sondern immer in Kombination mit adCmdText oder adCmdStoredProc (Beispiel: adCmdText+adExecuteNoRecords). Wird adExecuteNoRecords zusammen mit der Recordset.Open-Methode oder einem von dieser Methode verwendeten Command-Objekt verwendet, tritt ein Fehler auf.


Connect-Eigenschaft (RDS)

Legt den Namen der Datenbank fest, in der die Abfrage- und Aktualisierungsoperationen ausgeführt werden, oder gibt diesen Namen zurück.

Sie können die Connect-Eigenschaft zur Entwurfszeit in den OBJECT-Tags des RDS.DataControl-Objekts oder zur Laufzeit im Skripterstellungscode (z. B. VBScript) festlegen.

Syntax

Entwurfszeit: <PARAM NAME="Connect" VALUE="DSN=DSNName;UID=Benutzer;PWD=Kennwort;">

Laufzeit: DatenSteuerelement.Connect = "DSN=DSNName;UID=Benutzer;PWD=Kennwort;"

Parameter

DSNName Ein Wert vom Typ String, der den Namen der Datenquelle des Systems festlegt, mit dem eine bestimmte Datenbank angegeben wird.

Benutzer Ein Wert vom Typ String, der ein gültiges Benutzerkonto auf dem Server darstellt.

Kennwort Ein Wert vom Typ String, der ein gültiges Kennwort für das Benutzerkonto darstellt.

DatenSteuerelement Eine Objektvariable, die ein RDS.DataControl-Objekt darstellt.


ConnectionString-Eigenschaft (ADO)

ConnectionString-Eigenschaft

Enthält die Informationen, die zum Einrichten einer Verbindung zu einer Datenquelle verwendet werden.

Einstellungen und Rückgabewerte

Legt einen String-Wert fest oder gibt diesen zurück.

Hinweise

Verwenden Sie die ConnectionString-Eigenschaft, um eine Datenquelle festzulegen, indem Sie eine ausführliche Verbindungszeichenfolge übergeben, die eine Reihe von durch Semikolons abgetrennten Argument = Wert-Anweisungen enthält.

ADO unterstützt vier Argumente für die ConnectionString-Eigenschaft. Alle anderen Argumente werden direkt an den Provider übergeben, ohne von ADO verarbeitet zu werden. ADO unterstützt folgende Argumente:

Argument | Beschreibung
Provider= | Legt den Namen eines Providers fest, der für die Verbindung verwendet wird.
File Name= | Legt den Namen einer providerspezifischen Datei fest (z. B. ein ständiges Datenquellobjekt), die die voreingestellten Verbindungsinformationen enthält.
Remote Provider= | Legt den Namen eines Providers fest, der beim Öffnen einer clientbasierten Verbindung verwendet wird. (Nur Remote Data Service.)
Remote Server= | Legt den Namen des Servers fest, der beim Öffnen einer clientbasierten Verbindung verwendet wird. (Nur Remote Data Service.)

Nachdem Sie die ConnectionString-Eigenschaft festgelegt und das Connection-Objekt geöffnet haben, kann der Provider den Inhalt der Eigenschaft ändern, z. B. durch Zuordnen der ADO-definierten Argumentnamen zu ihren Provideräquivalenten.

Die ConnectionString-Eigenschaft übernimmt automatisch den Wert, der für das ConnectionString-Argument der Open-Methode verwendet wird. Daher kann die aktuelle ConnectionString-Eigenschaft während des Aufrufs der Open-Methode überschrieben werden.

Da das File Name-Argument ADO veranlasst, den zugeordneten Provider zu laden, können das Provider- und das File Name-Argument nicht zusammen übergeben werden.

Die ConnectionString-Eigenschaft bietet Schreib-/Lesezugriff, wenn die Verbindung geschlossen ist. Bei geöffneter Verbindung ist sie schreibgeschützt.

Verwenden von Remote Data Service In einem clientbasierten Connection-Objekt kann die ConnectionString-Eigenschaft nur die Parameter Remote Provider und Remote Server enthalten.


ConnectionTimeout-Eigenschaft (ADO)

ConnectionTimeout-Eigenschaft

Zeigt an, wie lange bei der Einrichtung einer Verbindung gewartet wird, bevor der Versuch abgebrochen und ein Fehler ausgelöst wird.

Einstellungen und Rückgabewerte

Legt einen Long-Wert fest, der in Sekunden anzeigt, wie lange auf das Öffnen der Verbindung gewartet wird, oder gibt diesen Wert zurück. Die Voreinstellung ist 15.

Hinweise

Verwenden Sie die ConnectionTimeout-Eigenschaft in einem Connection-Objekt, falls durch den Netzwerkverkehr oder die starke Serverbeanspruchung verursachte Verzögerungen den Abbruch des Verbindungsaufbaus erforderlich machen. Falls die Zeit aus der ConnectionTimeout-Eigenschaftseinstellung vor dem Öffnen der Verbindung abläuft, tritt ein Fehler auf und ADO bricht den Versuch ab. Wenn Sie die Eigenschaft auf Null festlegen, wartet ADO solange, bis die Verbindung geöffnet ist. Vergewissern Sie sich, dass der Provider, für den Sie Code schreiben, die ConnectionTimeout-Funktionalität unterstützt.

Die ConnectionTimeout-Eigenschaft bietet Schreib-/Lesezugriff, wenn die Verbindung geschlossen ist. Sie ist schreibgeschützt, wenn sie geöffnet ist.


Count-Eigenschaft (ADO)

Count-Eigenschaft

Gibt die Anzahl der Objekte in einer Auflistung an.

Rückgabewert

Gibt einen Long-Wert zurück.

Hinweise

Verwenden Sie die Count-Eigenschaft, um zu bestimmen, wie viele Objekte in einer gegebenen Auflistung vorhanden sind.

Da das Aufzählen der Elemente in einer Auflistung mit Null beginnt, sollten Sie stets Schleifen programmieren, die mit dem Nullelement beginnen und mit dem Wert der Count-Eigenschaft minus 1 enden. Wenn beim Verwenden von Microsoft® Visual Basic® ohne Prüfen der Count-Eigenschaft ein Schleifendurchlauf durch die Elemente einer Auflistung durchgeführt werden soll, verwenden Sie den For Each...Next-Befehl.

Ist die Count-Eigenschaft Null, enthält die Auflistung keine Objekte.


CursorLocation-Eigenschaft (ADO)

CursorLocation-Eigenschaft

Legt die Position eines Cursor Service fest oder gibt die Position zurück.

Einstellungen und Rückgabewerte

Legt einen Long-Wert fest, der auf eine der folgenden Konstanten gesetzt werden kann, oder gibt diesen Wert zurück.

Konstante | Beschreibung
adUseNone | Es werden keine Cursordienste verwendet. (Diese Konstante ist überflüssig. Sie wird nur angezeigt, um die Abwärtskompatibilität zu gewährleisten.)
adUseClient | Verwendet clientbasierte Cursor, die durch eine lokale Cursorbibliothek zur Verfügung gestellt werden. Lokale Cursorsdienste lassen häufig eine Vielzahl von Features zu, die bei treibergestützten Cursorn nicht zulässig sind. Daher kann die Verwendung dieser Einstellung im Hinblick auf die zu aktivierenden Features von Vorteil sein. Um die Abwärtskompatibilität zu gewährleisten, wird ebenfalls das gleichwertige adUseClientBatch unterstützt.
adUseServer | Voreinstellung. Verwendet durch Datenprovider oder Treiber zur Verfügung gestellte Cursor. Diese Cursor sind zum Teil sehr flexibel. Sie ermöglichen eine zusätzliche Sensibilität gegenüber Änderungen, die von anderen Personen an der Datenquelle vorgenommen werden. Einige Features von Microsoft Client Cursor Provider (z. B. nicht zugeordnete Recordsets) können mit serverbasierten Cursorn nicht simuliert werden. Diese Features stehen bei dieser Einstellung nicht zur Verfügung.

Hinweise

Durch diese Eigenschaft können Sie zwischen verschiedenen Cursorbibliotheken wählen, auf die der Provider zugreifen kann. Normalerweise haben Sie die Wahl zwischen der Verwendung einer clientbasierten Cursorbibliothek und einer auf dem Server gespeicherten Bibliothek.

Diese Eigenschaftseinstellung beeinflusst eingerichtete Verbindungen erst, nachdem die Eigenschaft festgelegt wurde. Das Ändern der CursorLocation-Eigenschaft hat keine Auswirkungen auf bestehende Verbindungen.

In einem Connection-Objekt oder einem geschlossenen Recordset-Objekt ist dies der Schreib-/Lesezugriff. In einem geöffneten Recordset-Objekt ist die Eigenschaft schreibgeschützt.

Cursor, die von der Execute-Methode zurückgegeben werden, übernehmen diese Einstellung. Recordsets übernehmen diese Einstellung automatisch aus den zugeordneten Verbindungen.

Verwenden von Remote Data Service In einem clientbasierten (ADOR) Recordset- oder Connection-Objekt kann die CursorLocation-Eigenschaft nur auf adUseClient gesetzt werden.


CursorType-Eigenschaft (ADO)

CursorType-Eigenschaft

Gibt den in einem Recordset-Objekt verwendeten Cursortyp an.

Einstellungen und Rückgabewerte

Legt einen der folgenden CursorTypeEnum-Werte fest oder gibt einen der Werte zurück:.

Konstante | Beschreibung
adOpenForwardOnly | Vorwärts-Cursor - Voreinstellung. Dieser Cursor ist identisch mit einem statischen Cursor, mit dem Unterschied, dass ein Blättern durch die Datensätze nur in Vorwärtsrichtung möglich ist. Dies verbessert die Leistung in Situationen, in denen nur ein einziger Durchlauf durch ein Recordset durchgeführt werden muss.
adOpenKeyset | Cursor vom Typ Keyset. Ähnelt einem dynamischen Cursor, mit dem Unterschied, dass von anderen Personen hinzugefügte Datensätze nicht angezeigt werden können, obwohl ein Zugriff auf von anderen Benutzern gelöschte Datensätze von Ihrem Recordset aus nicht möglich ist. Von anderen Personen vorgenommene Datenänderungen können weiterhin angezeigt werden.
adOpenDynamic | Dynamischer Cursor. Von anderen Personen vorgenommene Zusätze, Änderungen und Löschvorgänge können angezeigt werden. Alle Bewegungsarten durch den Datensatz sind zulässig, mit Ausnahme von Lesezeichen (sofern der Provider diese nicht unterstützt).
adOpenStatic | Statischer Cursor. Eine statische Kopie einer Gruppe von Datensätzen, anhand deren Daten gesucht und Berichte generiert werden können. Von anderen Benutzern vorgenommene Zusätze, Änderungen oder Löschvorgänge können nicht angezeigt werden.

Hinweise

Verwenden Sie die CursorType-Eigenschaft, um den Cursortyp festzulegen, der beim Öffnen des Recordset-Objekts verwendet werden soll. Die CursorType-Eigenschaft bietet Schreib-/Lesezugriff, wenn das Recordset-Objekt geschlossen ist. Wenn es geöffnet ist, ist sie schreibgeschützt.

Ein Festlegen von adUseStatic wird nur dann unterstützt, wenn die CursorLocation-Eigenschaft auf adUseClient gesetzt ist. Wird ein nicht unterstützter Wert festgelegt, tritt kein Fehler auf. Stattdessen wird die nächste unterstützte CursorType-Eigenschaft verwendet.

Falls ein Provider den gewünschten Cursortyp nicht unterstützt, gibt er möglicherweise einen anderen Cursortyp zurück. Die CursorType-Eigenschaft wird auf den aktuell verwendeten Cursortyp gesetzt, wenn das Recordset-Objekt geöffnet ist. Verwenden Sie die Supports-Methode, um eine bestimmte Funktionalität des zurückgegebenen Cursors zu überprüfen. Nach dem Schließen des Recordset-Objekts wird die CursorType-Eigenschaft wieder auf die ursprüngliche Einstellung zurückgesetzt.

In der folgenden Tabelle ist die für die einzelnen Cursortypen erforderliche Funktionalität des Providers aufgeführt (gekennzeichnet durch die Konstanten der Supports-Methode).

Für ein Recordset-Objekt mit diesem CursorType | Muss die Supports-Methode den Wert "True" für alle folgenden Konstanten zurückgeben
adOpenForwardOnly | Keine
adOpenKeyset | adBookmark, adHoldRecords, adMovePrevious, adResync
adOpenDynamic | adMovePrevious
adOpenStatic | adBookmark, adHoldRecords, adMovePrevious, adResync

Anmerkung Obwohl Supports(adUpdateBatch) für dynamische und Vorwärts-Cursor den Wert True besitzen kann, sollten Sie für Stapelaktualisierungen entweder nur einen Cursor vom Typ Schlüsselgruppe oder nur einen statischen Cursor verwenden. Setzen Sie die LockType-Eigenschaft auf adLockBatchOptimistic und die CursorLocation-Eigenschaft auf adUseClient, um den für Stapelaktualisierungen benötigten Cursordienst für OLE DB zu aktivieren.

Verwenden von Remote Data Service In einem clientbasierten (ADOR) Recordset-Objekt kann die CursorType-Eigenschaft nur auf adOpenStatic gesetzt werden.


DataMember-Eigenschaft (ADO)

DataMember-Eigenschaft

Gibt den Namen des Datenelements an, das von dem Objekt abgerufen werden soll, auf das die DataSource-Eigenschaft verweist.

Einstellungen und Rückgabewerte

Legt einen String-Wert fest oder gibt diesen zurück. Die Groß-/Kleinschreibung wird bei diesem Namen nicht berücksichtigt.

Hinweise

Diese Eigenschaft wird verwendet, um datengebundene Steuerelemente mit der Datenumgebung zu erstellen. Die Datenumgebung verwaltet Datenauflistungen (Datenquellen), die benannte Objekte (Datenelemente) enthalten, welche als Recordset-Objekt dargestellt werden.

Die DataMember- und DataSource-Eigenschaft müssen gemeinsam verwendet werden.

Die DataMember-Eigenschaft bestimmt, welches von der DataSource-Eigenschaft angegebene Objekt als Recordset-Objekt dargestellt wird. Das Recordset-Objekt muss geschlossen werden, bevor diese Eigenschaft festgelegt wird. Ein Fehler wird ausgelöst, wenn die DataMember-Eigenschaft nicht vor der DataSource-Eigenschaft festgelegt oder wenn der Name durch das in der DataSource-Eigenschaft angegebene Objekt nicht erkannt wird.

Weitere Informationen erhalten Sie im Abschnitt "Control Writer" des Data Access SDK.

Verwendung

Dim rs as New ADODB.Recordset
rs.DataMember = "Command"        'Name des Rowsets, an das gebunden wird
Set rs.DataSource = myDE        'Name des Objekts, das ein IRowset enthält


DataSource-Eigenschaft (ADO)

DataSource-Eigenschaft

Gibt ein Objekt an, das Daten enthält, die als Recordset-Objekt dargestellt werden.

Hinweise

Diese Eigenschaft wird verwendet, um datengebundene Steuerelemente mit der Datenumgebung zu erstellen. Die Datenumgebung verwaltet Datenauflistungen (Datenquellen), die benannte Objekte (Datenelemente) enthalten, welche als Recordset-Objekt dargestellt werden.

Die DataMember- und DataSource-Eigenschaft müssen gemeinsam verwendet werden.

Das Objekt, auf das verwiesen wird, muss die IDataSource-Schnittstelle implementieren und eine IRowset-Schnittstelle enthalten.

Weitere Informationen erhalten Sie im Abschnitt "Control Writer" des Data Access SDK.

Verwendung

Dim rs as New ADODB.Recordset
rs.DataMember = "Command"        'Name des Rowsets, an das gebunden wird
Set rs.DataSource = myDE        'Name des Objekts, das ein IRowset enthält


DefaultDatabase-Eigenschaft (ADO)

DefaultDatabase-Eigenschaft

Gibt die Standarddatenbank für ein Connection-Objekt an.

Einstellungen und Rückgabewerte

Legt einen Wert vom Typ String fest, der den Namen einer durch den Provider zur Verfügung gestellten Datenbank ergibt, oder gibt diesen Wert zurück.

Hinweise

Verwenden Sie die DefaultDatabase-Eigenschaft, um den Namen der Standarddatenbank für ein bestimmtes Connection-Objekt festzulegen oder zurückzugeben.

Wenn eine Standarddatenbank vorhanden ist, verwenden SQL-Zeichenfolgen eventuell eine nicht geeignete Syntax, um auf Objekte in dieser Datenbank zuzugreifen. Um auf Objekte in einer anderen als der in der DefaultDatabase-Eigenschaft festgelegten Datenbank zuzugreifen, müssen Sie die Objektnamen mit dem gewünschten Datenbanknamen versehen. Bei der Verbindung schreibt der Provider die standardmäßigen Datenbankinformationen in die DefaultDatabase-Eigenschaft. Einige Provider lassen nur eine Datenbank pro Verbindung zu. In solchen Fällen kann die DefaultDatabase-Eigenschaft nicht geändert werden.

Möglicherweise unterstützen einige Datenquellen und Provider dieses Feature nicht. In diesen Fällen wird ein Fehler oder eine leere Zeichenfolge zurückgegeben.

Verwenden von Remote Data Service Diese Eigenschaft steht in einem clientseitigen Connection-Objekt nicht zur Verfügung.


DefinedSize-Eigenschaft (ADO)

DefinedSize-Eigenschaft

Gibt die definierte Größe eines Field-Objekts an.

Rückgabewert

Gibt einen Long-Wert zurück, der die definierte Größe eines Feldes als Anzahl von Bytes darstellt.

Hinweise

Verwenden Sie die DefinedSize-Eigenschaft, um die Datenkapazität eines Field-Objekts zu bestimmen.

Die DefinedSize- und ActualSize-Eigenschaft sind unterschiedlich. Angenommen, ein Field-Objekt mit einem deklarierten Typ von adVarChar und einem DefinedSize-Eigenschaftswert von 50 enthält ein einzelnes Zeichen. Bei dem zurückgegebenen ActualSize-Eigenschaftswert handelt es sich um die Länge des einzelnen Zeichens in Bytes.


Description-Eigenschaft (ADO)

Description-Eigenschaft

Beschreibt ein Error -Objekt.

Rückgabewert

Gibt einen String-Wert zurück.

Hinweise

Verwenden Sie die Description-Eigenschaft, um eine kurze Beschreibung des Fehlers zu erhalten. Zeigen Sie diese Eigenschaft an, um den Benutzer auf einen Fehler aufmerksam zu machen, den Sie nicht beheben können oder möchten. Die Zeichenfolge wird entweder von ADO oder von einem Provider ausgegeben.

Provider sind für das Übergeben von spezifischem Fehlertext an ADO verantwortlich. ADO fügt der Errors-Auflistung für jeden erhaltenen Providerfehler oder jede erhaltene Warnung ein Error-Objekt hinzu. Verwenden Sie die Errors-Auflistung, um die durch den Provider übergebenen Fehler zu protokollieren.


Direction-Eigenschaft (ADO)

Direction-Eigenschaft

Zeigt an, ob der Parameter einen Eingabeparameter, einen Ausgabeparameter oder beides darstellt bzw. ob es sich bei dem Parameter um den Rückgabewert einer gespeicherten Prozedur handelt.

Einstellungen und Rückgabewerte

Legt einen der folgenden ParameterDirectionEnum-Werte fest oder gibt einen dieser Werte zurück:

Konstante | Beschreibung
adParamUnknown | Gibt an, dass die Richtung des Parameters unbekannt ist.
adParamInput | Voreinstellung. Gibt einen Eingabeparameter an.
adParamOutput | Gibt einen Ausgabeparameter an.
adParamInputOutput | Gibt sowohl einen Eingabe- als auch einen Ausgabeparameter an.
adParamReturnValue | Gibt einen Rückgabewert an.

Hinweise

Verwenden Sie die Direction-Eigenschaft, um festzulegen, wie ein Parameter an eine Prozedur oder von einer Prozedur übergeben wird. Die Direction-Eigenschaft bietet Schreib-/Lesezugriff. Durch diese Eigenschaft können Sie mit Providern arbeiten, die diese Informationen nicht zurückgeben, oder Sie können diese Informationen festlegen, wenn ADO keinen zusätzlichen Aufruf des Providers zum Abrufen von Parameterinformationen durchführen soll.

Nicht alle Provider können die Richtung von Parametern in ihren gespeicherten Prozeduren bestimmen. In diesen Fällen müssen Sie die Direction-Eigenschaft vor dem Ausführen der Abfrage festlegen.


EditMode-Eigenschaft (ADO)

EditMode-Eigenschaft

Gibt den Bearbeitungsstatus des aktuellen Datensatzes an.

Rückgabewert

Gibt einen der folgenden EditModeEnum-Werte zurück.

Konstante | Beschreibung
adEditNone | Gibt an, dass derzeit keine Bearbeitung stattfindet.
adEditInProgress | Gibt an, dass Daten im aktuellen Datensatz geändert, aber noch nicht gespeichert wurden.
adEditAdd | Gibt an, dass die AddNew-Methode aufgerufen wurde. Der aktuelle Datensatz im Kopierpuffer ist ein neuer Datensatz, der in der Datenbank noch nicht gespeichert wurde.
adEditDelete | Gibt an, dass der aktuelle Datensatz gelöscht wurde.

Hinweise

ADO verwaltet einen Bearbeitungspuffer, der dem aktuellen Datensatz zugeordnet ist. Diese Eigenschaft gibt an, ob Änderungen an diesem Puffer vorgenommen wurden oder ob ein neuer Datensatz erstellt wurde. Verwenden Sie die EditMode-Eigenschaft, um den Bearbeitungsstatus des aktuellen Datensatzes zu bestimmen. Sie können überprüfen, ob noch nicht gespeicherte Änderungen vorhanden sind, falls ein Bearbeitungsvorgang unterbrochen wurde, und bestimmen, ob Sie die Update- oder CancelUpdate-Methode verwenden müssen.

Eine ausführliche Beschreibung der EditMode-Eigenschaft unter unterschiedlichen Bearbeitungsbedingungen finden Sie unter der AddNew-Methode.


ExecuteOptions-Eigenschaft (RDS)

Gibt an, ob asynchrone Ausführung aktiviert ist.

Einstellungen und Rückgabewerte

Legt einen der folgenden Werte fest oder gibt einen der Werte zurück:

Konstante | Beschreibung
adcExecSync | Führt die nächste Aktualisierung des Recordset-Objekts synchron aus.
adcExecAsync | Voreinstellung. Führt die nächste Aktualisierung des Recordset-Objekts asynchron aus.

Anmerkung Jede clientbasierte ausführbare Datei, in der diese Konstanten verwendet werden, muss Deklarationen für die Konstanten zur Verfügung stellen. Die gewünschten Konstantendeklarationen können aus der Datei Adcvbs.inc im Ordner C:\Programme\Gemeinsame Dateien\system\MSADC ausgeschnitten und an entsprechender Stelle wieder eingefügt werden.

Hinweise

Wenn die ExecuteOptions-Eigenschaft auf adcExecAsync gesetzt ist, wird der nächste Refresh-Aufruf im Recordset des RDS.DataControl-Objekts asynchron ausgeführt.

Wenn Sie Reset, Refresh, SubmitChanges, CancelUpdate oder Recordset aufrufen, während eine weitere asynchrone Operation ausgeführt wird, kann dadurch unter Umständen das Recordset des RDS.DataControl-Objekts geändert werden, und ein Fehler tritt auf.

Wenn während der Ausführung einer asynchronen Operation ein Fehler auftritt, ändert sich der Wert der ReadyState-Eigenschaft des RDS.DataControl-Objekts von adcReadyStateLoaded auf adcReadyStateComplete. Der Wert der Recordset-Eigenschaft bleibt Nothing.


FetchOptions-Eigenschaft (RDS)

Gibt den Typ des asynchronen Abrufs an.

Einstellungen und Rückgabewerte

Legt einen der folgenden Werte fest oder gibt einen der Werte zurück:

Konstante | Beschreibung
adcFetchUpFront | Alle Datensätze des Recordset-Objekts werden abgerufen, bevor das Steuerelement an die Anwendung zurückgegeben wird. Das vollständige Recordset-Objekt wird abgerufen, bevor die Anwendung eine Aktion mit dem Objekt durchführen kann.
AdcFetchBackground | Das Steuerelement kann an die Anwendung zurückgegeben werden, sobald der erste Stapel von Datensätzen abgerufen wurde. Ein nachfolgender Lesevorgang des Recordset-Objekts, der versucht, auf einen Datensatz zuzugreifen, der im ersten Stapel nicht abgerufen wurde, wird solange aufgeschoben, bis der Abruf des betreffenden Datensatzes tatsächlich erfolgt ist. Zu diesem Zeitpunkt wird das Steuerelement an die Anwendung zurückgegeben.
AdcFetchAsync | Voreinstellung. Das Steuerelement wird unmittelbar an die Anwendung zurückgegeben, während der Abruf der Datensätze im Hintergrund durchgeführt wird. Wenn die Anwendung versucht, einen noch nicht abgerufenen Datensatz zu lesen, wird der Datensatz gelesen, der dem gesuchten Datensatz am nächsten ist. Das Steuerelement wird dann sofort zurückgegeben und gibt damit an, dass das aktuelle Ende des Recordset-Objekts erreicht wurde. Beispielsweise wird durch den Aufruf der MoveLast-Methode die aktuelle Datensatzposition auf den letzten abgerufenen Datensatz verschoben, obwohl das Recordset-Objekt noch mit weiteren Datensätzen aufgefüllt wird.

Anmerkung Jede clientbasierte ausführbare Datei, in der diese Konstanten verwendet werden, muss Deklarationen für die Konstanten zur Verfügung stellen. Die gewünschten Konstantendeklarationen können aus der Datei Adcvbs.inc im Ordner C:\Programme\Gemeinsame Dateien\system\MSADC ausgeschnitten und an entsprechender Stelle wieder eingefügt werden.

Hinweise

In einer Webanwendung ist die Verwendung von adcFetchAsync (der Voreinstellung) sinnvoll, da dies zu einer Leistungsverbesserung führt. In einer kompilierten Clientanwendung ist es normalerweise empfehlenswert, adcFetchBackground zu verwenden.


Filter-Eigenschaft (ADO)

Filter-Eigenschaft

Gibt einen Filter für die Daten in einem Recordset-Objekt an.

Einstellungen und Rückgabewerte

Legt einen Variant-Wert fest oder gibt diesen Wert zurück. Dieser Wert kann eines der folgenden Elemente enthalten:

  • Kriterienzeichenfolge - eine Zeichenfolge, die aus einer oder mehreren einzelnen Klauseln besteht, die durch die Operatoren AND oder OR verkettet sind.

  • Array mit Lesezeichen — ein Array mit eindeutigen Lesezeichenwerten, die auf Datensätze im Recordset-Objekt verweisen.

  • Einen der folgenden FilterGroupEnum-Werte:
    Konstante | Beschreibung
    adFilterNone | Entfernt den aktuellen Filter und stellt alle Datensätze für die Anzeige wieder zur Verfügung.
    AdFilterPendingRecords | Zeigt nur die Datensätze an, die sich geändert haben, aber noch nicht an den Server gesendet wurden. Nur für den Stapelaktualisierungsmodus vorhanden.
    AdFilterAffectedRecords | Zeigt nur die Datensätze an, die von dem letzten Delete-, Resync-, UpdateBatch- oder CancelBatch-Aufruf betroffen sind.
    adFilterFetchedRecords | Zeigt nur die Datensätze im aktuellen Zwischenspeicher an, d. h. die Ergebnisse des letzten Abrufs von Datensätzen aus der Datenbank.
    adFilterConflictingRecords | Ermöglicht die Anzeige der Datensätze, die bei der letzten Stapelaktualisierung nicht verarbeitet werden konnten.

Hinweise

Verwenden Sie die Filter-Eigenschaft, um ausgewählte Datensätze in einem Recordset-Objekt auszublenden. Das gefilterte Recordset-Objekt wird zum aktuellen Cursor. Dies wirkt sich auf andere Eigenschaften wie AbsolutePosition, AbsolutePage, RecordCount und PageCount aus, die auf dem aktuellen Cursor basierende Werte zurückgeben. Durch das Festlegen der Filter-Eigenschaft auf einen bestimmten Wert wird der aktuelle Datensatz auf den ersten Datensatz positioniert, der dem neuen Wert entspricht.

Die Kriterienzeichenfolge besteht aus Klauseln in der Form Feldname-Operator-Wert (z. B. "LastName = 'Schmidt'"). Zusammengesetzte Klauseln können durch Verketten einzelner Klauseln mit AND (z. B., "LastName = 'Schmidt' AND FirstName = 'Jan'") oder OR (z. B., "LastName = 'Schmidt' OR LastName = 'Meier'") erstellt werden. Verwenden Sie die folgenden Richtlinien für Kriterienzeichenfolgen:

  • Feldname muss ein gültiger Feldname aus dem Recordset-Objekt sein. Falls der Feldname Leerstellen enthält, müssen Sie den Namen in eckige Klammern einschließen.

  • Operator muss einer der folgenden Operatoren sein: <, >, <=, >=, <>, = oder LIKE.

  • Wert ist der Wert, der mit den Feldwerten verglichen wird (z. B. 'Schmidt', #8/24/95#, 12,345 oder $50,00). Verwenden Sie einfache Anführungszeichen mit Zeichenfolgen und Nummernzeichen (#) mit Datumswerten. Für Zahlen können Sie Dezimalpunkte, Währungszeichen und Exponentialzahlnotation verwenden. Wenn Operator gleich LIKE ist, kann Wert Platzhalter verwenden. Nur die Platzhalter Sternchen (*) und Prozentzeichen (%) sind zulässig. Sie müssen das letzte Zeichen in der Zeichenfolge sein. Wert kann nicht Null sein.

  • AND hat keinen Vorrang vor OR und umgekehrt. Klauseln können innerhalb von Klammern zusammengefasst werden. Sie können durch OR verbundene Klauseln jedoch nicht zunächst in einer Gruppe zusammenfassen und diese Gruppe dann mit einer anderen Klausel verbinden, die ein AND enthält (wie im folgenden Beispiel dargestellt).
    (LastName = 'Schmidt' OR LastName = 'Meier') AND FirstName = 'Jan'

  • Dieser Filter wird stattdessen in der folgenden Form erstellt:

    (LastName = 'Schmidt' AND FirstName = 'Jan') OR (LastName = 'Meier' AND FirstName = 'Jan')

    •

  • In einer LIKE-Klausel kann ein Platzhalter am Anfang und Ende des Musters (z. B; LastName Like '*mit*') oder nur am Ende des Musters (z. B. LastName Like 'Schm*') verwendet werden.
    •

Die Filterkonstanten vereinfachen das Auflösen einzelner Datensatzkonflikte während des Stapelaktualisierungsmodus, indem z. B. nur solche Datensätze angezeigt werden, die während des letzten Aufrufs der UpdateBatch-Methode betroffen waren.

Das Festlegen der Filter-Eigenschaft selbst könnte aufgrund eines Konflikts mit den zugrunde liegenden Daten fehlschlagen (wenn z. B. ein Datensatz bereits von einem anderen Benutzer gelöscht wurde). In diesem Fall gibt der Provider Warnungen an die Errors-Auflistung zurück, ohne die Programmausführung jedoch anzuhalten. Ein Laufzeitfehler tritt nur auf, wenn es Konflikte mit allen angeforderten Datensätzen gibt. Verwenden Sie die Status-Eigenschaft, um festzustellen, wo sich Datensätze mit Konflikten befinden.

Das Festlegen der Filter-Eigenschaft auf eine Zeichenfolge mit Nulllänge ("") hat den gleichen Effekt wie das Verwenden der adFilterNone-Konstante.

Sobald die Filter-Eigenschaft festgelegt wird, wird die aktuelle Datensatzposition auf den ersten Datensatz in der gefilterten Untermenge der Datensätze im Recordset-Objekt verschoben. Wenn die Filter-Eigenschaft gelöscht wurde, wird die aktuelle Datensatzposition ebenfalls auf den ersten Datensatz im Recordset-Objekt verschoben.

Eine Erklärung der Lesezeichenwerte, aus denen Sie ein Array aufbauen können, um es mit der Filter-Eigenschaft zu verwenden, finden Sie unter der Bookmark-Eigenschaft.


FilterColumn-Eigenschaft (RDS)

Gibt die Spalte an, auf die die Filterkriterien angewendet werden sollen.

Syntax

DatenSteuerelement.FilterColumn = Zeichenfolge

Parameter

DatenSteuerelement Eine Objektvariable, die ein RDS.DataControl-Objekt darstellt.

Zeichenfolge Ein String-Wert, der die Spalte angibt, auf die die Filterkriterien angewendet werden sollen. Die Filterkriterien sind in der FilterCriterion-Eigenschaft festgelegt.

Hinweise

Die SortColumn-, SortDirection-, FilterValue-, FilterCriterion- und FilterColumn-Eigenschaften stellen Sortier- und Filterfunktionen im clientbasierten Zwischenspeicher zur Verfügung. Die Sortierfunktion sortiert Datensätze nach Werten aus einer Spalte. Die Filterfunktion zeigt eine Untermenge der Datensätze auf der Grundlage von Suchkriterien an, während das vollständige Recordset-Objekt im Zwischenspeicher verbleibt. Die Reset-Methode führt die Kriterien aus und ersetzt das aktuelle Recordset-Objekt durch ein aktualisierbares Recordset-Objekt.


FilterCriterion-Eigenschaft (RDS)

Legt den im Filterwert zu verwendenden Auswertungsoperator fest oder gibt diesen Operator zurück.

Syntax

DatenSteuerelement.FilterColumn = Zeichenfolge

Parameter

DatenSteuerelement Eine Objektvariable, die ein RDS.DataControl-Objekt darstellt.

Zeichenfolge Ein String-Wert, der den Auswertungsoperator der FilterValue-Eigenschaft für die Datensätze festlegt. Es kann sich hierbei um einen der folgenden Operatoren handeln: <, <=, >, >=, = oder <>.

Hinweise

Die SortColumn-, SortDirection-, FilterValue-, FilterCriterion- und FilterColumn-Eigenschaften stellen Sortier- und Filterfunktionen im clientbasierten Zwischenspeicher zur Verfügung. Die Sortierfunktion sortiert Datensätze nach Werten aus einer Spalte. Die Filterfunktion zeigt eine Untermenge der Datensätze auf der Grundlage von Suchkriterien an, während das vollständige Recordset-Objekt im Zwischenspeicher verbleibt. Die Reset-Methode führt die Kriterien aus und ersetzt das aktuelle Recordset-Objekt durch ein aktualisierbares Recordset-Objekt.

Der Operator "!=" ist für FilterCriterion nicht gültig. Verwenden Sie stattdessen "<>".

Wenn sowohl die Filter- als auch die Sortiereigenschaften festgelegt sind und die Reset-Methode aufgerufen wird, dann wird das Rowset zunächst gefiltert und anschließend sortiert. Bei aufsteigenden Sortiervorgängen befinden sich die NULL-Werte an der Spitze, bei absteigenden Sortiervorgängen befinden sie sich am Ende (aufsteigendes Sortieren ist das Standardverhalten).


FilterValue-Eigenschaft (RDS)

Legt den Wert fest, mit dem die Datensätze gefiltert werden, oder gibt diesen Wert zurück.

Syntax

DatenSteuerelement.FilterColumn = Zeichenfolge

Parameter

DatenSteuerelement Eine Objektvariable, die ein RDS.DataControl-Objekt darstellt.

Zeichenfolge Ein String-Wert, der einen Datenwert angibt, mit dem die Datensätze gefiltert werden (z. B. 'Programmierer' oder 125).

Hinweise

Die SortColumn-, SortDirection-, FilterValue-, FilterCriterion- und FilterColumn-Eigenschaften stellen Sortier- und Filterfunktionen im clientbasierten Zwischenspeicher zur Verfügung. Die Sortierfunktion sortiert Datensätze nach Werten aus einer Spalte. Die Filterfunktion zeigt eine Untermenge der Datensätze auf der Grundlage von Suchkriterien an, während das vollständige Recordset-Objekt im Zwischenspeicher verbleibt. Die Reset-Methode führt die Kriterien aus und ersetzt das aktuelle Recordset-Objekt durch ein aktualisierbares Recordset-Objekt.

Null-Werte führen zu dem Fehler "Typen unverträglich".


Handler-Eigenschaft (RDS)

Legt eine Zeichenfolge fest oder gibt eine Zeichenfolge zurück, die den Namen eines serverbasierten Anpassungsprogramms (Behandlungsroutine) enthält, mit dem die Funktionalität von RDSServer.DataFactory sowie alle durch die Behandlungsroutine verwendeten Parameter erweitert werden. Dabei müssen die einzelnen Elemente durch Kommas (",") voneinander getrennt werden.

Syntax

DatenSteuerelement.Handler = Zeichenfolge

Parameter

DatenSteuerelement Eine Objektvariable, die ein RDS.DataControl-Objekt darstellt.

Zeichenfolge Ein String-Wert, der den Namen der Behandlungsroutine sowie sämtliche Parameter enthält, wobei die einzelnen Elemente durch Kommas voneinander getrennt werden (z. B., "handlerName,parm1,parm2,...,parm N").

Hinweise

Die durch diese Eigenschaft unterstützte Funktionalität wird als Anpassung bezeichnet. Für die Unterstützung der Anpassung ist das Setzen der CursorLocation-Eigenschaft auf adUseClient erforderlich.

Der Name der Behandlungsroutine und die zugehörigen Parameter (sofern vorhanden) werden durch Kommas (",") voneinander getrennt. Wenn an einer beliebigen Stelle innerhalb der Zeichenfolge ein Semikolon (";") enthalten ist, ist das Verhalten nicht vorhersehbar. Sie können eine eigene Behandlungsroutine schreiben, solange diese die IDataFactoryHandler-Schnittstelle unterstützt.

Der Name der standardmäßigen Behandlungsroutine ist MSDFMAP.Handler. Der Standardparameter ist eine Anpassungsdatei mit der Bezeichnung MSDFMAP.INI. Verwenden Sie diese Eigenschaft, um vom Serveradministrator erstellte alternative Anpassungsdateien aufzurufen.

Die Alternative zum Setzen der Handler-Eigenschaft besteht im Festlegen einer Behandlungsroutine und der zugehörigen Parameter in der ConnectionString-Eigenschaft, d. h. "Handler=handlerName,parm1,parm2,...;".


HelpConext, HelpFile-Eigenschaften (ADO)

HelpContext, HelpFile-Eigenschaften

Gibt Hilfedatei und Hilfethema zu einem bestimmten Error-Objekt an.

Rückgabewerte

  • HelpContextID - gibt eine Kontext-ID als Long-Wert für ein Thema in einer Hilfedatei zurück.

  • HelpFile - Gibt einen Wert vom Typ String zurück, der einen vollständig aufgeschlüsselten Pfad zu einer Hilfedatei ergibt.

Hinweise

Wenn in der HelpFile-Eigenschaft eine Hilfedatei angegeben ist, wird das angegebene Hilfethema mit Hilfe der HelpContext-Eigenschaft automatisch angezeigt. Ist kein passendes Hilfethema verfügbar, dann wird von der HelpContext-Eigenschaft Null und von der HelpFile-Eigenschaft eine Zeichenfolge mit Nulllänge ("") zurückgegeben.


Index-Eigenschaft (ADO)

Index-Eigenschaft

Gibt den Namen des derzeit gültigen Indexes für ein Recordset-Objekt an.

Einstellungen und Rückgabewerte

Legt einen String-Wert fest oder gibt diesen zurück, welcher der Indexname ist.

Hinweise

Der von der Index-Eigenschaft genannte Index muss zuvor in der Basistabelle, die dem Recordset-Objekt zugrunde liegt, angegeben worden sein. Der Index muss also als ein ADOX Index-Objekt programmgesteuert oder zum Zeitpunkt, als die Basistabelle erstellt wurde, angegeben worden sein.

Ein Laufzeitfehler tritt auf, wenn der Index nicht festgelegt werden kann. Die Index-Eigenschaft kann nicht innerhalb der Ereignisbehandlungsroutine WillRecordsetChange oder RecordsetChangeComplete festgelegt werden. Auch während das Recordset-Objekt noch eine Operation ausführt, kann sie nicht festgelegt werden. Die Index-Eigenschaft kann immer festgelegt werden, wenn das Recordset geschlossen ist, doch dieses kann nicht geöffnet werden, oder der Index wird nicht benutzbar sein, wenn der zugrunde liegende Provider keine Indizes unterstützt.

Wenn der Index festgelegt werden kann, ändert sich möglicherweise die aktuelle Zeilenposition. Hierdurch wird die AbsolutePosition-Eigenschaft aktualisiert, und es werden WillRecordsetChange-, RecordsetChangeComplete-, WillMove-, und MoveComplete-Ereignisse generiert.

Wenn der Index festgelegt werden kann und die LockType-Eigenschaft adLockPessimistic oder adLockOptimistic ist, dann wird automatisch eine UpdateBatch-Operation ausgeführt, wodurch die aktuellen und betroffenden Gruppen freigegeben werden. Ein evtl. vorhandener Filter wird freigegeben, und die aktuelle Zeilenposition wird geändert und auf die erste Zeile des neu geordneten Recordset-Objekts gesetzt.

Die Index-Eigenschaftwird zusammen mit der Seek-Methode verwendet. Unterstützt der zugrunde liegende Provider die Index–Eigenschaft und daher auch die Seek-Methode nicht, dann sollten Sie erwägen, stattdessen die Find-Methode zu verwenden. Entscheiden Sie, ob das Recordset-Objekt Indizes mit der Supports (adIndex)-Methode unterstützt.

Die integrierte Index-Eigenschaft hat nichts mit der dynamischen Optimize-Eigenschaft zu tun, obwohl beide Indizes betreffen.


InternetTimeout-Eigenschaft (RDS)

Zeigt die Anzahl an Millisekunden an, die bis zum Ablaufen des Zeitlimits einer Anforderung vergehen.

Einstellungen und Rückgabewerte

Legt einen Long-Wert fest oder gibt diesen zurück.

Hinweise

Diese Eigenschaft ist nur für Anforderungen gültig, die mit dem HTTP- oder dem HTTPS-Protokoll gesendet wurden.

Die Ausführung von Anforderungen in einer Umgebung mit drei Ebenen benötigt unter Umständen mehrere Minuten. Verwenden Sie diese Eigenschaft, um zusätzliche Zeit für Anforderungen festzulegen, deren Ausführung einen längeren Zeitraum benötigt.


IsolationLevel-Eigenschaft (ADO)

IsolationLevel-Eigenschaft

Zeigt die Isolierungsebene für ein Connection-Objekt an.

Einstellungen und Rückgabewerte

Legt einen der folgenden IsolationLevelEnum-Werte fest oder gibt einen der folgenden Werte zurück.

Konstante | Beschreibung
adXactUnspecified | Gibt an, dass der Provider eine andere als die angegebene IsolationLevel verwendet. Diese Ebene kann jedoch nicht bestimmt werden.
adXactChaos | Voreinstellung. Zeigt an, dass Sie anstehende Änderungen aus stärker isolierten Transaktionen nicht überschreiben können.
adXactBrowse | Zeigt an, dass Sie in einer Transaktion die nicht übernommenen Änderungen aus anderen Transaktionen anzeigen können.
adXactReadUncommitted | Entspricht adXactBrowse.
adXactCursorStability | Voreinstellung. Zeigt an, dass Sie in einer Transaktion Änderungen aus anderen Transaktionen nur anzeigen können, nachdem diese übernommen wurden.
adXactReadCommitted | Entspricht adXactCursorStability.
adXactRepeatableRead | Zeigt an, dass Sie in einer Transaktion keine Änderungen einsehen können, die in anderen Transaktionen vorgenommen wurden. Das erneute Abfragen kann jedoch neue Recordsets liefern.
adXactIsolated | Zeigt an, dass Transaktionen von anderen Transaktionen isoliert durchgeführt werden.
adXactSerializable | Entspricht adXactIsolated.

Hinweise

Verwenden Sie die IsolationLevel-Eigenschaft, um die Isolierungsebene eines Connection-Objekts festzulegen. Die IsolationLevel-Eigenschaft bietet Schreib-/Lesezugriff. Die Einstellung wirkt sich erst dann aus, wenn Sie die BeginTrans-Methode das nächste Mal aufrufen. Falls die von Ihnen angeforderte Isolierungsebene nicht zur Verfügung steht, gibt der Provider gegebenenfalls die nächsthöhere Isolierungsebene zurück.

Verwenden von Remote Data Service In einem clientbasierten Connection-Objekt kann die IsolationLevel-Eigenschaft nur auf adXactUnspecified gesetzt werden.

Da Benutzer nicht verbundene Recordset-Objekte in einem clientbasierten Zwischenspeicher verwenden, können aufgrund gleichzeitiger Benutzung Probleme auftreten. Wenn beispielsweise zwei verschiedene Personen versuchen, denselben Datensatz zu aktualisieren, ermöglicht Remote Data Service dies nur dem Benutzer, der als Erster auf den Datensatz zugegriffen hat. Die Aktualisierungsanforderung der zweiten Person schlägt fehl und ein Fehler tritt auf.


LockType-Eigenschaft (ADO)

LockType-Eigenschaft

Zeigt die Art der Sperrung an, die während des Bearbeitens auf Datensätze gelegt wird.

Einstellungen und Rückgabewerte

Legt einen der folgenden LockTypeEnum-Werte fest oder gibt einen dieser Werte zurück.

Konstante | Beschreibung
adLockReadOnly | Voreinstellung. Schreibgeschützt - Sie können die Daten nicht ändern.
AdLockPessimistic | Vollständiges Sperren, Datensatz für Datensatz - der Provider führt die notwendigen Schritte aus, um das erfolgreiche Bearbeiten der Datensätze sicherzustellen, üblicherweise, indem er Datensätze in der Datenquelle sofort beim Bearbeiten sperrt.
AdLockOptimistic | Teilweises Sperren, Datensatz für Datensatz - der Provider verwendet teilweises Sperren, indem er Datensätze nur sperrt, wenn Sie die Update-Methode aufrufen.
AdLockBatchOptimistic | Teilweise Stapelaktualisierungen - erforderlich für den Stapelaktualisierungsmodus, im Gegensatz zum Modus für sofortige Aktualisierung.

Hinweise

Legt vor dem Öffnen eines Recordset-Objekts die LockType-Eigenschaft fest, um anzugeben, welchen Sperrtyp der Provider beim Öffnen des Objekts verwenden sollte. Liest die verwendete Eigenschaft, um den Sperrtyp zurückzugeben, der in einem geöffneten Recordset-Objekt verwendet wird. Die LockType-Eigenschaft bietet Schreib-/Lesezugriff, wenn das Recordset-Objekt geschlossen ist. Sie ist schreibgeschützt, wenn es geöffnet ist.

Unter Umständen unterstützt ein Provider nicht alle Sperrtypen. Wenn ein Provider die gewünschte LockType-Einstellung nicht unterstützt, wird sie durch einen anderen Sperrtyp ersetzt. Verwenden Sie zum Bestimmen der aktuell in einem Recordset-Objekt verfügbaren Sperrfunktion die Supports-Methode mit adUpdate und adUpdateBatch.

Die adLockPessimistic-Einstellung wird nicht unterstützt, wenn die CursorLocation-Eigenschaft auf adUseClient gesetzt ist. Wird ein nicht unterstützter Wert festgelegt, tritt kein Fehler auf. Stattdessen wird die nächste unterstützte LockType-Eigenschaft verwendet.

Verwenden von Remote Data Service In einem clientbasierten (ADOR) Recordset-Objekt kann die LockType-Eigenschaft nur auf adLockOptimisticBatch festgelegt werden.


MarshalOptions-Eigenschaft (ADO)

MarshalOptions-Eigenschaft

Gibt an, welche Datensätze durch Marshaling an den Server zurückgegeben werden.

Einstellungen und Rückgabewerte

Legt einen Long-Wert fest oder gibt diesen Wert zurück, bei dem es sich um eine der folgenden Konstanten handeln kann.

Konstante | Beschreibung
adMarshalAll | Voreinstellung. Gibt an, dass alle Zeilen an den Server zurückgegeben werden.
adMarshalModifiedOnly | Gibt an, dass nur geänderte Zeilen an den Server zurückgegeben werden.

Hinweise

In einem clientbasierten (ADOR) Recordset-Objekt werden auf dem Client geänderte Datensätze durch ein als Marshaling bezeichnetes Verfahren zurück auf den Server der mittleren Ebene oder den Webserver geschrieben. Bei diesem Verfahren werden Parameter für schnittstellenübergreifende Methoden gepackt und über Thread- oder Prozessgrenzen gesendet. Durch das Festlegen der MarshalOptions-Eigenschaft kann die Leistung verbessert werden, wenn geänderte Remotedaten durch Marshaling zu Aktualisierungszwecken zurück an den Server der mittleren Ebene oder den Webserver gesendet werden.

Verwenden von Remote Data Service Diese Eigenschaft wird nur in einem clientbasierten (ADOR) Recordset-Objekt verwendet.


MaxRecords-Eigenschaft (ADO)

MaxRecords-Eigenschaft

Gibt die maximale Anzahl an Datensätzen an, die aus einer Abfrage an ein Recordset-Objekt zurückgegeben werden.

Einstellungen und Rückgabewerte

Legt einen Long-Wert fest oder gibt diesen zurück. Die Voreinstellung ist Null (keine Begrenzung).

Hinweise

Verwenden Sie die MaxRecords-Eigenschaft, um die Anzahl der Datensätze zu beschränken, die der Provider von der Datenquelle zurückgibt. Die Voreinstellung für die Eigenschaft ist Null, d. h. der Provider gibt alle gewünschten Datensätze zurück. Die MaxRecords-Eigenschaft bietet Schreib-/Lesezugriff, wenn das Recordset-Objekt geschlossen ist. Sie ist schreibgeschützt, wenn es geöffnet ist.


Mode-Eigenschaft (ADO)

Mode-Eigenschaft

Gibt die verfügbaren Berechtigungen für das Ändern von Daten in einem Connection-Objekt an.

Einstellungen und Rückgabewerte

Legt einen der folgenden ConnectModeEnum-Werte fest oder gibt einen dieser Werte zurück:

Konstante | Beschreibung
adModeUnknown | Voreinstellung. Gibt an, dass die Berechtigungen noch nicht festgelegt wurden oder nicht bestimmt werden können.
adModeRead | Gibt schreibgeschützte Berechtigungen an.
adModeWrite | Gibt Nur-Lese-Berechtigungen an.
adModeReadWrite | Gibt Schreib-/Leseberechtigungen an.
adModeShareDenyRead | Verhindert das Öffnen einer Verbindung mit Leseberechtigungen durch andere Personen.
adModeShareDenyWrite | Verhindert das Öffnen einer Verbindung mit Schreibberechtigungen durch andere Personen.
adModeShareExclusive | Verhindert das Öffnen einer Verbindung durch andere Personen.
adModeShareDenyNone | Verhindert das Öffnen einer Verbindung mit beliebigen Berechtigungen durch andere Personen.

Hinweise

Verwenden Sie die Mode-Eigenschaft, um die vom Provider momentan verwendeten Zugriffsberechtigungen für die aktuelle Verbindung festzulegen oder zurückzugeben. Sie können die Mode-Eigenschaft nur festlegen, wenn das Connection-Objekt geschlossen ist.

Verwenden von Remote Data Service In einem clientbasierten Recordset-Objekt kann die Mode-Eigenschaft nur auf adModeUnknown festgelegt werden.


Name-Eigenschaft (ADO)

Name-Eigenschaft

Gibt den Namen eines Objekts an.

Einstellungen und Rückgabewerte

Legt einen String-Wert fest oder gibt diesen zurück. Der Wert bietet Schreib-Lesezugriff in einem Command- oder Parameter-Objekt; in einem Property- oder Field-Objekt ist er schreibgeschützt.

Hinweise

Verwenden Sie die Name-Eigenschaft, um einem Command-, Field-, Parameter- oder Property-Objekt einen Namen zuzuweisen oder den Namen aus einem dieser Objekte abzurufen.

Bei Parameter-Objekten, die der Parameters-Auflistung noch nicht hinzugefügt wurden, bietet die Name-Eigenschaft Schreib-/Lesezugriff. Bei hinzugefügten Parameter-Objekten und allen anderen Objekten ist die Name-Eigenschaft schreibgeschützt. Namen können innerhalb einer Auflistung mehrmals verwendet werden.

Sie können die Name-Eigenschaft eines Objekts durch einen Ordinalverweis abrufen. Danach können Sie auf das Objekt anhand des Namens direkt verweisen. Wenn rstMain.Properties(20).Name z. B. Updatability enthält, können Sie sich nachfolgend auf diese Eigenschaft als rstMain.Properties("Updatability") beziehen.


NativeError-Eigenschaft (ADO)

NativeError-Eigenschaft

Gibt den providerspezifischen Fehlercode für ein gegebenes Error-Objekt an.

Rückgabewert

Gibt einen Long-Wert zurück.

Hinweise

Verwenden Sie die NativeError-Eigenschaft, um die datenbankspezifischen Fehlerinformationen für ein bestimmtes Error-Objekt abzurufen. Wenn Sie z. B. den Microsoft ODBC-Provider für OLE DB mit einer Microsoft® SQL Server™-Datenbank verwenden, werden systemeigene Fehlercodes, die ihren Ursprung im SQL-Server haben, über ODBC und den ODBC-Provider an die NativeError -Eigenschaft von ADO übergeben.


Number-Eigenschaft (ADO)

Number-Eigenschaft

Gibt die Nummer an, durch die ein Error-Objekt eindeutig gekennzeichnet wird.

Rückgabewert

Gibt einen Long-Wert zurück.

Hinweise

Verwenden Sie die Number-Eigenschaft, um den aufgetretenen Fehler zu bestimmen. Der Wert der Eigenschaft ist eine eindeutige Zahl, die der Fehlerbedingung entspricht.


NumericScale-Eigenschaft (ADO)

NumericScale-Eigenschaft

Gibt die Skalierung der numerischen Werte in einem Parameter- oder Field-Objekt an.

Einstellungen und Rückgabewerte

Legt einen Byte-Wert fest oder gibt diesen Wert zurück, der die Anzahl der Dezimalstellen angibt, bis zu der numerische Werte aufgeschlüsselt werden.

Hinweise

Verwenden Sie die NumericScale-Eigenschaft, um die Anzahl der Ziffern nach dem Komma zu bestimmen, mit der die Werte für ein numerisches Parameter- oder Field-Objekt dargestellt werden.

Für Parameter-Objekte bietet die NumericScale-Eigenschaft Schreib-/Lesezugriff. Für Field-Objekte ist die NumericScale-Eigenschaft schreibgeschützt.


Optimize-Eigenschaft (RDS)

Gibt an, ob über diesem Feld ein Index erstellt werden soll.

Einstellungen und Rückgabewerte

Legt einen booleschen Wert fest oder gibt diesen Wert zurück.

Hinweise

Ein Index kann die Leistung von Operationen verbessern, die Werte in einem Recordset-Objekt suchen oder sortieren. Der Index ist eine ADO-interne Funktion. Sie können darauf nicht ausdrücklich zugreifen oder sie in der Anwendung benutzen.

Die Optimize-Eigenschaft ist "dynamisch". Sie ist nicht Teil der Schnittstelle des Field-Objekts. Sie ist nicht Teil der Schnittstelle des Field-Objekts. Sie ist lediglich in der Properties-Auflistung eines Field-Objekts vorhanden, vorausgesetzt, dass die CursorLocation-Eigenschaft auf adUseClient gesetzt wird.

Um einen Index über einem Feld zu erstellen, setzen Sie die Optimize-Eigenschaft auf den Wert True. Um den Index zu löschen, setzen Sie diese Eigenschaft auf False.

Verwendung

Dim rs As New Recordset
Dim fld As Field
rs.CursorLocation = adUseClient      'Indexerstellung ermöglichen
rs.Fields.Append "Field1", adChar, 35, adFldIsNullable
rs.Open
Set fld = rs.Fields(0)
fld.Properties("Optimize") = True    'Index erstellen
fld.Properties("Optimize") = False   'Index löschen


OriginalValue-Eigenschaft (ADO)

OriginalValue-Eigenschaft

Gibt den Wert eines Field-Objekts an, bevor Änderungen vorgenommen wurden.

Rückgabewert

Gibt einen Variant-Wert zurück.

Hinweise

Verwenden Sie die OriginalValue-Eigenschaft, um den ursprünglichen Feldwert für ein Feld aus dem aktuellen Datensatz zurückzugeben.

Im Modus für sofortige Aktualisierung (der Provider schreibt Änderungen in die zugrunde liegende Datenquelle, sobald Sie die Update-Methode aufrufen) gibt die OriginalValue-Eigenschaft den Feldwert zurück, der vor etwaigen Änderungen vorhanden war (d. h. seit dem letzten Aufruf der Update-Methode). Dies ist der gleiche Wert, den die CancelUpdate-Methode zum Ersetzen der Value-Eigenschaft verwendet.

Im Stapelaktualisierungsmodus (der Provider speichert mehrere Änderungen im Zwischenspeicher und schreibt diese nur dann in die zugrunde liegende Datenquelle, wenn Sie die UpdateBatch-Methode aufrufen) gibt die OriginalValue-Eigenschaft den Feldwert aus, der vor der Durchführung der Änderungen vorhanden war (d. h. seit dem letzten Aufruf der UpdateBatch-Methode). Dies ist der gleiche Wert, den die CancelBatch-Methode zum Ersetzen der Value-Eigenschaft verwendet. Wenn Sie diese Eigenschaft mit der UnderlyingValue-Eigenschaft verwenden, können Sie aus Stapelaktualisierungen resultierende Konflikte auflösen.


PageCount-Eigenschaft (ADO)

PageCount-Eigenschaft

Gibt an, wie viele Datenseiten das Recordset-Objekt enthält.

Rückgabewert

Gibt einen Long-Wert zurück.

Hinweise

Verwenden Sie die PageCount-Eigenschaft, um die Anzahl der Datenseiten im Recordset-Objekt zu bestimmen. Seiten sind Gruppen von Datensätzen, deren Größe der PageSize-Eigenschaftseinstellung entspricht. Selbst wenn die letzte Seite unvollständig ist, weil sie z. B. weniger Datensätze enthält als in der PageSize-Eigenschaft angegeben sind, zählt sie als zusätzliche Seite für die PageCount-Eigenschaft. Falls das Recordset-Objekt diese Eigenschaft nicht unterstützt, beträgt der Wert -1, um anzuzeigen, dass PageCount nicht bestimmbar ist.

Weitere Informationen über die Funktionalität von Seiten finden Sie unter den PageSize- und AbsolutePage-Eigenschaften.


PageSize-Eigenschaft (ADO)

PageSize-Eigenschaft

Gibt an, aus wie vielen Datensätzen eine Seite im Recordset-Objekt besteht.

Einstellungen und Rückgabewerte

Legt einen Long-Wert fest oder gibt diesen Wert zurück. Dieser Wert zeigt an, wie viele Datensätze sich auf einer Seite befinden. Die Voreinstellung ist 10.

Hinweise

Verwenden Sie die PageSize-Eigenschaft, um die Anzahl der Datensätze zu bestimmen, aus denen eine logische Datenseite besteht. Nach dem Bestimmen einer Seitengröße können Sie die AbsolutePage-Eigenschaft verwenden, um sich zum ersten Datensatz einer bestimmten Seite zu bewegen. Dies ist hilfreich bei Webservern, die Benutzern das Blättern durch Daten ermöglichen, wobei mehrere Datensätze gleichzeitig angezeigt werden können.

Diese Eigenschaft kann jederzeit festgelegt werden. Ihr Wert wird verwendet, um die Position des ersten Datensatzes auf einer bestimmten Seite zu berechnen.


Precision-Eigenschaft (ADO)

Precision-Eigenschaft

Gibt den Genauigkeitsgrad für die numerischen Werte in einem Parameter-Objekt oder für numerische Field-Objekte an.

Einstellungen und Rückgabewerte

Legt einen Byte-Wert fest oder gibt diesen Wert zurück. Dieser Wert gibt die maximale Gesamtzahl von Ziffern an, die zum Darstellen von numerischen Werten verwendet werden. Der Wert bietet in einem Parameter-Objekt Schreib-/Lesezugriff und in einem Field-Objekt ist er schreibgeschützt.

Hinweise

Verwenden Sie die Precision-Eigenschaft, um die maximale Anzahl von Ziffern zu bestimmen, mit der die Werte für ein numerisches Parameter- oder Field-Objekt dargestellt werden.


Prepared-Eigenschaft (ADO)

Prepared-Eigenschaft

Gibt an, ob eine kompilierte Version eines Befehls vor dessen Ausführung gespeichert werden soll.

Einstellungen und Rückgabewerte

Legt einen booleschen Wert fest oder gibt diesen Wert zurück.

Hinweise

Verwenden Sie die Prepared-Eigenschaft, damit der Provider eine vorbereitete (oder kompilierte) Version der Abfrage, die in der CommandText-Eigenschaft festgelegt ist, vor der ersten Ausführung des Command-Objekts speichert. Dies kann die erste Ausführung eines Befehls verlangsamen. Sobald der Provider jedoch einen Befehl kompiliert hat, verwendet er für alle nachfolgenden Ausführungen die kompilierte Version des Befehls. Hierdurch wird die Leistung verbessert.

Wenn die Eigenschaft den Wert False hat, führt der Provider das Command-Objekt direkt aus, ohne eine kompilierte Version zu erstellen.

Unterstützt der Provider die Befehlsvorbereitung nicht, wird möglicherweise ein Fehler zurückgegeben, sobald diese Eigenschaft auf den Wert True gesetzt wird. Wenn kein Fehler zurückgegeben wird, wird die Anforderung zum Vorbereiten des Befehls ignoriert. Die Prepared-Eigenschaft wird dann auf den Wert False festgelegt.


Provider-Eigenschaft (ADO)

Provider-Eigenschaft

Gibt den Namen des Providers für ein Connection-Objekt an.

Einstellungen und Rückgabewerte

Legt einen String-Wert fest oder gibt diesen zurück.

Hinweise

Verwenden Sie die Provider-Eigenschaft, um den Namen des Providers für eine Verbindung festzulegen oder zurückzugeben. Diese Eigenschaft kann auch durch den Inhalt der ConnectionString-Eigenschaft oder des ConnectionString-Arguments der Open-Methode festgelegt werden. Das Festlegen eines Providers an mehreren Adressen während des Aufrufs der Open-Methode kann unvorhersehbare Ergebnisse zur Folge haben. Falls kein Provider festgelegt wird, wird die Eigenschaft standardmäßig mit MSDASQL (Microsoft OLE DB Provider für ODBC) vorgegeben.

Die Provider-Eigenschaft bietet Schreib-/Lesezugriff, wenn die Verbindung geschlossen ist, und sie ist schreibgeschützt, wenn die Verbindung geöffnet ist. Die Einstellung wirkt sich erst aus, wenn Sie entweder das Connection-Objekt öffnen oder auf die Properties-Auflistung des Connection-Objekts zugreifen. Falls die Einstellung ungültig ist, tritt ein Fehler auf.


RecordCount-Eigenschaft (ADO)

RecordCount-Eigenschaft

Gibt die aktuelle Anzahl von Datensätzen in einem Recordset-Objekt an.

Rückgabewert

Gibt einen Long-Wert zurück.

Hinweise

Verwenden Sie die RecordCount-Eigenschaft, um die Anzahl der Datensätze in einem Recordset-Objekt festzustellen. Die Eigenschaft gibt -1 zurück, wenn ADO die Anzahl von Datensätzen nicht bestimmen kann, oder wenn der Provider oder der Cursortyp RecordCount nicht unterstützt. Das Lesen der RecordCount-Eigenschaft bei geschlossenem Recordset-Objekt verursacht einen Fehler.

Wenn das Recordset-Objekt die ungefähre Positionierung oder Lesezeichen unterstützt, d. h. wenn Supports (adApproxPosition) oder Supports (adBookmark) den Wert True zurückgibt, stellt dieser Wert die exakte Anzahl an Datensätzen im Recordset-Objekt dar, unabhängig davon, ob alle Datensätze geladen wurden. Falls das Recordset-Objekt die ungefähre Positionierung nicht unterstützt, kann diese Eigenschaft einen erheblichen Verbrauch an Ressourcen verursachen, da alle Datensätze abgerufen und gezählt werden müssen, damit ein präziser RecordCount-Wert zurückgegeben werden kann.

Es hängt vom Cursortyp des Recordset-Objekts ab, ob die Anzahl der Datensätze bestimmt werden kann. Die RecordCount-Eigenschaft gibt -1 für einen Vorwärtscursor, das tatsächliche Zählergebnis für einen statischen Cursor oder Cursor vom Typ Schlüsselgruppe, und entweder -1 oder das tatsächliche Zählergebnis für einen dynamischen Cursor zurück, je nach Datenquelle.


Recordset- und SourceRecordset-Eigenschaften (RDS)

Gibt das ADOR.Recordset-Objekt an, das von einem benutzerdefinierten GEschäftsobjekt. zurückgegeben wird.

Sie können die SourceRecordset-Eigenschaft festlegen oder die Recordset-Eigenschaft zur Laufzeit im Skripterstellungscode (z. B. VBScript) lesen.

Syntax

DatenSteuerelement.SourceRecordset = Recordset

Recordset = DatenSteuerelement.Recordset

Parameter

DatenSteuerelement Eine Objektvariable, die ein RDS.DataControl-Objekt darstellt.

Recordset Eine Objektvariable, die ein ADOR.Recordset-Objekt darstellt.

Hinweise

SourceRecordset ist eine lesegeschützte Eigenschaft. Die Recordset-Eigenschaft ist hingegen eine schreibgeschützte Eigenschaft.

Sie können die SourceRecordset-Eigenschaft auf ein Recordset-Objekt festlegen, das von einem entsprechenden Geschäftsobjekt zurückgegeben wurde.

Diese Eigenschaften ermöglichen einer Anwendung die Verwaltung des Bindungsprozesses mit Hilfe eines benutzerdefinierten Verfahrens. Die Anwendung erhält ein in einem Recordset-Objekt enthaltenes Rowset. Auf diese Weise ist eine direkte Interaktion mit dem Recordset-Objekt sowie das Durchführen von Aktionen möglich, wie z. B. das Festlegen von Eigenschaften oder das Durchlaufen des Recordset-Objekts.


ReadyState-Eigenschaft (RDS)

Gibt den Fortschritt eines RDS.DataControl-Objekts beim Abrufen von Daten in das dazugehörige Recordset-Objekt wieder.

Einstellungen und Rückgabewerte

Legt einen der folgenden Werte fest oder gibt einen der Werte zurück:

Wert | Beschreibung
adcReadyStateLoaded | Die aktuelle Abfrage wird momentan noch ausgeführt und es wurden keine Zeilen abgerufen. Das Recordset des RDS.DataControl-Objekts ist nicht verfügbar.
adcReadyStateInteractive | Eine erste durch die aktuelle Abfrage abgerufene Gruppe von Zeilen wurde im Recordset des RDS.DataControl-Objekts gespeichert und ist verfügbar. Die übrigen Zeilen werden momentan noch abgerufen.
adcReadyStateComplete | Alle von der aktuellen Abfrage abgerufenen Zeilen wurden im Recordset des RDS.DataControl-Objekts gespeichert und sind verfügbar. Dieser Zustand liegt auch vor, wenn eine Operation wegen eines Fehlers abgebrochen wurde oder wenn das Recordset-Objekt nicht initialisiert ist.

Anmerkung Jede clientbasierte ausführbare Datei, in der diese Konstanten verwendet werden, muss Deklarationen für die Konstanten zur Verfügung stellen. Die gewünschten Konstantendeklarationen können aus der Datei Adcvbs.inc im Ordner C:\Programme\Gemeinsame Dateien\system\MSADC ausgeschnitten und an entsprechender Stelle wieder eingefügt werden.

Hinweise

Verwenden Sie die onReadyStateChange-Ereignismethode zur Überwachung von Änderungen in der ReadyStateChange-Eigenschaft während einer asynchronen Abfrageoperation. Dies ist effizienter als das regelmäßige Prüfen des Wertes der Eigenschaft.

Wenn während der Ausführung einer asynchronen Operation ein Fehler auftritt, ändert sich die ReadyState-Eigenschaft in adcReadyStateComplete und die State-Eigenschaft von adStateExecuting in adStateClosed. Der Wert der Value-Eigenschaft des Recordset-Objekts bleibt Nothing.


Server-Eigenschaft (RDS)

Legt den Namen für Internet Information Server (IIS) und das Kommunikationsprotokoll fest oder gibt diese Angaben zurück.

Sie können die Server-Eigenschaft zur Entwurfszeit in den OBJECT-Tags des RDS.DataControl-Objekts oder zur Laufzeit im Skripterstellungscode (z. B. VBScript) festlegen.

Syntax

Protokoll | Syntax zur Entwurfszeit
HTTP | <PARAM NAME="Server" VALUE="http://einWebserver:Anschluss">
HTTPS | <PARAM NAME="Server" VALUE="https://einWebserver:Anschluss">
DCOM | <PARAM NAME="Server" VALUE="Computername">
Prozessintern | <PARAM NAME="Server" VALUE="">

Protokoll | Syntax zur Laufzeit
HTTP | DatenSteuerelement.Server="https:/einWebserver:Anschluss"
HTTPS | DatenSteuerelement.Server="https:/einWebserver:Anschluss"
DCOM | DatenSteuerelement.Server="Computername"
Prozessintern | DatenSteuerelement.Server=""

Teil | Beschreibung
einWebserver oder Computername | Ein Wert vom Typ String, der einen gültigen Internet- oder Intranetpfad und den Servernamen enthält.
Anschluss | Optional. Ein Anschluss, über den die Verbindung mit einem IIS-Server hergestellt wird. Die Anschlussnummer wird im Internet Explorer (klicken Sie im Menü Ansicht auf Optionen und dann auf die Registerkarte Verbindung) oder in IIS festgelegt.
DatenSteuerelement | Eine Objektvariable, die ein RDS.DataControl-Objekt darstellt.

Hinweise

Am Serverstandort werden die serverbasierten Objekte erstellt (im Gegensatz zum Speicherort der Daten, sofern sich diese unterscheiden).


Size-Eigenschaft (ADO)

Size-Eigenschaft

Gibt die maximale Größe eines Parameter-Objekts in Bytes oder Zeichen an.

Einstellungen und Rückgabewerte

Legt einen Long-Wert fest oder gibt diesen Wert zurück, der die maximale Größe eines Wertes in einem Parameter-Objekt in Bytes oder Zeichen angibt.

Hinweise

Verwenden Sie die Size-Eigenschaft, um die maximale Größe für Werte zu bestimmen, die in die Value-Eigenschaft eines Parameter-Objekts geschrieben oder aus ihr gelesen werden. Die Size-Eigenschaft bietet Schreib-/Lesezugriff.

Wenn Sie einen Datentyp variabler Länge für ein Parameter-Objekt (z. B. ein beliebiger String-Typ wie adVarChar) festlegen, müssen Sie die Size-Eigenschaft des Objekts festlegen, bevor es an die Parameters-Auflistung angehängt wird. Andernfalls tritt ein Fehler auf.

Wenn Sie das Parameter-Objekt bereits an die Parameters-Auflistung eines Command-Objekts angehängt haben und nun seinen Typ in einen Datentyp variabler Länge ändern, müssen Sie die Size-Eigenschaft des Parameter-Objekts vor dem Ausführen des Command-Objekts festlegen. Andernfalls tritt ein Fehler auf.

Wenn Sie die Refresh-Methode zum Anfordern von Parameterinformationen vom Provider verwenden und ein oder mehrere Parameter-Objekte variabler Länge zurückgegeben werden, kann ADO den Speicher für die Parameter auf der Grundlage ihrer maximalen potenziellen Größe zuordnen. Hierdurch kann während der Ausführung ein Fehler verursacht werden. Um einen solchen Fehler zu vermeiden, sollten Sie die Size-Eigenschaft für diese Parameter unbedingt vor dem Ausführen des Befehls festlegen.


Sort-Eigenschaft (ADO)

Sort-Eigenschaft

Gibt einen oder mehrere Feldnamen an, nach denen die Sortierung im Recordset-Objekt durchgeführt wird. Außerdem wird angegeben, ob die einzelnen Felder in aufsteigender oder absteigender Reihenfolge sortiert werden.

Einstellungen und Rückgabewerte

Legt einen Wert vom Typ String fest oder gibt einen Wert vom Typ String zurück, der durch Kommas voneinander getrennte Feldnamen enthält, nach denen sortiert wird. Dabei ist jeder Name ein Field-Objekt im Recordset-Objekt, auf das optional ein Leerzeichen und das Schlüsselwort ASC oder DESC folgt. Durch dieses Schlüsselwort wird die Sortierreihenfolge des Feldes bestimmt.

Hinweise

Die Daten werden nicht physisch neu geordnet; lediglich der Zugriff darauf erfolgt in der Sortierreihenfolge.

Für jedes in der Sort-Eigenschaft festgelegte Feld wird ein temporärer Index erstellt, wenn die CursorLocation-Eigenschaft auf adUseClient gesetzt und noch kein Index vorhanden ist.

Durch das Festlegen der Sort-Eigenschaft auf eine leere Zeichenfolge wird die ursprüngliche Reihenfolge der Zeilen wiederhergestellt. Temporäre Indizes werden gelöscht. Vorhandene Indizes werden nicht gelöscht.

Das Feld kann nicht "ASC" der "DESC" benannt werden, denn diese Namen würden einen Konflikt mit den Schlüsselwörtern ASC und DESC verursachen. Geben Sie einem Feld mit einem Namen, bei dem ein Konflikt auftreten würde, einen Alias. Verwenden Sie dazu das Schlüsselwort AS in der Abfrage, die das Recordset zurückgibt.


SortColumn-Eigenschaft (RDS)

Legt die Spalte fest, nach der die Datensätze sortiert werden, oder gibt diese Spalte zurück.

Syntax

DatenSteuerelement.SortColumn = Zeichenfolge

Parameter

DatenSteuerelement Eine Objektvariable, die ein RDS.DataControl-Objekt darstellt.

Zeichenfolge Ein String-Wert, der den Namen oder den Alias der Spalte darstellt, nach der die Datensätze sortiert werden.

Hinweise

Die Eigenschaften SortColumn, SortDirection, FilterValue, FilterCriterion und FilterColumn stellen Sortier- und Filterfunktionen im clientbasierten Zwischenspeicher zur Verfügung. Die Sortierfunktion sortiert Datensätze nach Werten aus einer Spalte. Die Filterfunktion zeigt eine Untermenge der Datensätze auf der Grundlage von Suchkriterien an, während das vollständige Recordset-Objekt im Zwischenspeicher verbleibt. Die Reset-Methode führt die Kriterien aus und ersetzt das aktuelle Recordset-Objekt durch ein aktualisierbares Recordset-Objekt.

Um eine Sortierung in einem Recordset-Objekt vorzunehmen, müssen zunächst alle durchgeführten Änderungen gespeichert werden. Beim Verwenden des RDS.DataControl-Objekts kann die SubmitChanges-Methode verwendet werden. Wenn beispielsweise das von Ihnen verwendete RDS.DataControl-Objekt die Bezeichnung "ADC1" trägt, wird folgender Code verwendet: ADC1.SubmitChanges. Wird ein Recordset-Objekt von ADO verwendet, können Sie die UpdateBatch-Methode dieses Objekts verwenden. Das Verwenden der UpdateBatch-Methode wird für Recordset-Objekte empfohlen, die mit der CreateRecordset-Methode erstellt wurden. Codebeispiele: myRS.UpdateBatch oder ADC1.Recordset.UpdateBatch.


SortDirection-Eigenschaft (RDS)

Legt einen booleschen Wert fest oder gibt diesen Wert zurück. Dieser Wert gibt an, ob es sich um eine aufsteigende oder absteigende Sortierung handelt.

Syntax

DatenSteuerelement.SortDirection = Wert

Parameter

DatenSteuerelement Eine Objektvariable, die ein RDS.DataControl-Objekt darstellt.

Wert Ein boolescher Wert, der einen der folgenden Werte festlegt oder zurückgibt:

  • True - Aufsteigende Sortierreihenfolge

  • False – Absteigende Sortierreihenfolge

Hinweise

Hinweise Die SortColumn-, SortDirection-, FilterValue-, FilterCriterion- und FilterColumn-Eigenschaften stellen Sortier- und Filterfunktionen im clientbasierten Zwischenspeicher zur Verfügung. Die Sortierfunktion sortiert Datensätze nach Werten aus einer Spalte. Die Filterfunktion zeigt eine Untermenge der Datensätze auf der Grundlage von Suchkriterien an, während das vollständige Recordset-Objekt im Zwischenspeicher verbleibt. Die Reset-Methode führt die Kriterien aus und ersetzt das aktuelle Recordset-Objekt durch ein aktualisierbares Recordset-Objekt.


Source-Eigenschaft (ADO Error-Objekt)

Gibt den Namen des Objekts oder der Anwendung an, das/die ursprünglich einen Fehler ausgelöst hat.

Rückgabewert

Gibt einen String-Wert zurück.

Hinweise

Verwenden Sie die Source-Eigenschaft in einem Error-Objekt, um den Namen des Objekts oder der Anwendung zu bestimmen, das/die ursprünglich einen Fehler ausgelöst hat. Hierbei kann es sich um den Klassennamen oder die Programm-ID des Objekts handeln. Bei Fehlern in ADODB ist der Eigenschaftswert ADODB.Objektname. Dabei ist Objektname der Name des Objekts, das den Fehler ausgelöst hat. Die Source-Eigenschaft ist für Error-Objekte schreibgeschützt.

Basierend auf der Fehlerdokumentation aus der Source-, Number- und Description-Eigenschaft der Error-Objekte können Sie Code erstellen, der eine geeignete Fehlerbehandlung ermöglicht.


Source-Eigenschaft (ADO Recordset-Objekt)

Gibt die Quelle der Daten in einem Recordset-Objekt an (Command-Objekt, SQL-Anweisung, Tabellenname oder gespeicherte Prozedur).

Einstellungen und Rückgabewerte

Legt einen String-Wert oder einen Verweis auf ein Command-Objekt fest. Gibt nur einen String-Wert zurück.

Hinweise

Verwenden Sie die Source-Eigenschaft, um eine Datenquelle für ein Recordset-Objekt unter Verwendung eines der folgenden Elemente festzulegen: eine Command-Objektvariable, eine SQL-Anweisung, eine gespeicherte Prozedur oder ein Tabellenname. Die Source-Eigenschaft bietet Schreib-/Lesezugriff für geschlossene Recordset-Objekte und sie ist schreibgeschützt für geöffnete Recordset-Objekte.

Wenn Sie die Source-Eigenschaft eines Command-Objekts festlegen, übernimmt die ActiveConnection-Eigenschaft des Recordset-Objekts den Wert der ActiveConnection-Eigenschaft für das festgelegte Command-Objekt. Das Lesen der Source-Eigenschaft gibt jedoch kein Command-Objekt, sondern die CommandText-Eigenschaft des Command-Objekts zurück, dessen Source-Eigenschaft festgelegt wird.

Falls es sich bei der Source-Eigenschaft um eine SQL-Anweisung, eine gespeicherte Prozedur oder einen Tabellennamen handelt, können Sie die Leistung optimieren, indem Sie das entsprechende Options-Argument beim Aufruf der Open-Methode übergeben.


SQL-Eigenschaft (RDS)

Setzt die Abfragezeichenfolge, die zum Abrufen des Recordset-Objekts verwendet wird, oder gibt diese zurück.

Sie können die SQL-Eigenschaft zur Entwurfszeit in den OBJECT-Tags des RDS.DataControl-Objekts oder zur Laufzeit im Skripterstellungscode (z. B. VBScript) festlegen.

Syntax

Entwurfszeit: <PARAM NAME="SQL" VALUE="AbfrageZeichenfolge">

Laufzeit: DataControl.SQL = "AbfrageZeichenfolge"

Parameter

AbfrageZeichenfolge Ein String, der eine gültige SQL-Datenanforderung enthält.

DatenSteuerelement Eine Objektvariable, die ein RDS.DataControl-Objekt darstellt.

Hinweise

Im Allgemeinen handelt es sich dabei um eine SQL-Anweisung (die den Dialekt des Datenbankservers verwendet), wie z. B. "Select * from NewTitle". Um sicherzustellen, dass die Datensätze genau übereinstimmen und korrekt aktualisiert werden, darf eine aktualisierbare Abfrage kein langes Binärfeld oder ein berechnetes Feld enthalten.

Die SQL-Eigenschaft ist optional, wenn ein benutzerdefiniertes serverbasiertes Geschäftsobjekt die Daten für den Client abruft.


SQLState-Eigenschaft (ADO)

SQLState-Eigenschaft

Gibt den SQL-Zustand für ein gegebenes Error-Objekt an.

Rückgabewert

Gibt einen Wert vom Typ String mit fünf Zeichen zurück, der den Konventionen des ANSI SQL-Standards entspricht.

Hinweise

Verwenden Sie die SQLState-Eigenschaft, um den fünf Zeichen umfassenden Fehlercode zu lesen, den der Provider zurückgibt, wenn ein Fehler während des Verarbeitens einer SQL-Anweisung auftritt. Wenn Sie z. B. den Microsoft OLE DB Provider für ODBC mit einer Microsoft® SQL Server™-Datenbank verwenden, haben die Fehlercodes für den SQL-Zustand ihren Ursprung in ODBC. Dabei liegen ihnen Fehler zugrunde, die entweder spezifisch für ODBC sind oder ihren Ursprung im Microsoft SQL Server haben und dann den ODBC-Fehlern zugeordnet werden. Diese Fehlercodes sind im ANSI SQL-Standard dokumentiert, können durch unterschiedliche Datenquellen jedoch verschieden implementiert sein.


State-Eigenschaft (ADO)

State-Eigenschaft

Beschreibt für alle anwendbaren Objekte, ob der Status des Objekts geöffnet oder geschlossen ist.

Beschreibt für ein Recordset-Objekt, das eine asynchrone Methode ausführt, ob der aktuelle Status des Objekts 'verbindend', 'ausführend' oder 'abrufend' ist.

Rückgabewert

Gibt einen Long-Wert zurück, bei dem es sich um eine der folgenden Konstanten handeln kann.

Konstante | Beschreibung
adStateClosed | Voreinstellung. Gibt an, dass das Objekt geschlossen ist.
adStateOpen | Gibt an, dass das Objekt geöffnet ist.
adStateConnecting | Gibt an, dass das Recordset-Objekt zurzeit eine Verbindung herstellt.
adStateExecuting | Gibt an, dass das Recordset-Objekt zurzeit einen Befehl ausführt.
adStateFetching | Gibt an, dass die Zeilen des Recordset-Objekts zurzeit abgerufen werden.

Hinweise

Mit der State-Eigenschaft kann der aktuelle Zustand eines gegebenen Objekts jederzeit bestimmt werden. Diese Eigenschaft ist schreibgeschützt.

Die State-Eigenschaft des Recordset-Objekts kann eine Kombination von Werten besitzen. Wenn beispielsweise eine Anweisung ausgeführt wird, besitzt diese Eigenschaft einen kombinierten Wert, der sich aus adStateOpen und adStateExecuting zusammensetzt.


Status-Eigenschaft (ADO)

Status-Eigenschaft

Gibt den Status des aktuellen Datensatzes in Bezug auf Stapelaktualisierungen oder andere umfangreiche Vorgänge an.

Rückgabewert

Gibt eine Summe aus einem oder mehreren der folgenden RecordStatusEnum-Werte zurück:

Konstante | Beschreibung
adRecOK | Der Datensatz wurde erfolgreich aktualisiert.
AdRecNew | Der Datensatz ist neu.
AdRecModified | Der Datensatz wurde geändert.
AdRecDeleted | Der Datensatz wurde gelöscht.
AdRecUnmodified | Der Datensatz wurde nicht geändert.
AdRecInvalid | Der Datensatz wurde nicht gespeichert, da sein Lesezeichen ungültig ist.
AdRecMultipleChanges | Der Datensatz wurde nicht gespeichert, da dies mehrere Datensätze beeinflusst hätte.
AdRecPendingChanges | Der Datensatz wurde nicht gespeichert, da er sich auf eine noch anstehende Einfügung bezieht.
AdRecCanceled | Der Datensatz wurde nicht gespeichert, da die Operation abgebrochen wurde.
AdRecCantRelease | Der neue Datensatz wurde nicht gespeichert, da Datensatzsperren vorhanden sind.
AdRecConcurrencyViolation | Der Datensatz wurde nicht gespeichert, da teilweise gesperrte (eingeschränkte) Parallelität ausgewählt war.
AdRecIntegrityViolation | Der Datensatz wurde nicht gespeichert, da Integritätsbeschränkungen verletzt wurden.
AdRecMaxChangesExceeded | Der Datensatz wurde nicht gespeichert, da es zu viele anstehende Änderungen gab.
AdRecObjectOpen | Der Datensatz wurde nicht gespeichert, da ein Konflikt mit einem geöffneten Speicherobjekt besteht.
AdRecOutOfMemory | Der Datensatz wurde nicht gespeichert, da der Speicher des Computers erschöpft ist.
AdRecPermissionDenied | Der Datensatz wurde nicht gespeichert, da der Benutzer nicht über ausreichende Berechtigungen verfügt.
AdRecSchemaViolation | Der Datensatz wurde nicht gespeichert, da er die Struktur der zugrunde liegenden Datenbank verletzt.
AdRecDBDeleted | Der Datensatz wurde bereits aus der Datenquelle gelöscht.

Hinweise

Verwenden Sie die Status-Eigenschaft, um zu ermitteln, welche Änderungen für Datensätze anstehen, die während der Stapelaktualisierung bearbeitet wurden. Sie können außerdem die Status-Eigenschaft verwenden, um den Status von Datensätzen zu bestimmen, die bei umfangreichen Vorgängen fehlschlagen, wenn Sie z. B. die Methode Resync, UpdateBatch oder CancelBatch in einem Recordset-Objekt aufrufen oder die Filter-Eigenschaft in einem Recordset-Objekt auf ein Array mit Lesezeichen festlegen. Mit dieser Eigenschaft können Sie bestimmen, warum ein bestimmter Datensatz fehlgeschlagen ist, und diesen Konflikt entsprechend lösen.


StayInSync-Eigenschaft (ADO)

StayInSync-Eigenschaft

Gibt in einem hierarchischen Recordset-Objekt an, ob der Verweis auf die zugrunde liegenden untergeordneten Datensätze (d. h. ein Kapitel) sich ändert, wenn die Position der übergeordneten Zeile sich ändert.

Einstellungen und Rückgabewerte

Legt einen booleschen Wert fest oder gibt diesen Wert zurück. Der Standardwert ist True. Gilt True, dann wird das Kapitel aktualisiert, wenn die Zeilenposition des übergeordneten Recordset-Objekts sich ändert; gilt False, dann verweist das Kapitel weiterhin auf die Daten im vorhergehenden Kapitel, obwohl die Zeilenposition des übergeordneten Recordset-Objekts sich geändert hat.

Hinweise

Diese Eigenschaft wird auf hierarchische Recordsets, wie z. B. durch den Microsoft Data Shaping Service für OLE DB unterstützte Recordsets, angewendet und muss auf das übergeordnete Recordset-Objekt gesetzt werden, bevor das untergeordnete Recordset-Objekt abgerufen wird. Diese Eigenschaft erleichtert das Bewegen durch hierarchische Recordsets.


Type-Eigenschaft (ADO)

Type-Eigenschaft

Gibt den Operationstyp oder Datentyp eines Parameter-, Field- oder Property-Objekts an.

Einstellungen und Rückgabewerte

Legt einen der folgenden DataTypeEnum-Werte fest oder gibt einen dieser Werte zurück. Der entsprechende OLE DB-Typanzeiger ist in der Spalte "Beschreibung" der folgenden Tabelle in Klammern angegeben. Weitere Informationen zu OLE DB-Datentypen erhalten Sie in Kapitel 10 und Anhang A des OLE DB Programmer's Reference.

Konstante | Beschreibung
adArray | Wird mit einem logischen OR-Argument mit einem anderen Typ verbunden, um anzugeben, dass es sich bei den Daten um ein sicheres Array dieses Typs handelt (DBTYPE_ARRAY).
adBigInt | Eine 8 Byte umfassende Ganzzahl mit Vorzeichen (DBTYPE_I8).
adBinary | Ein Binärwert (DBTYPE_BYTES).
adBoolean | Ein boolescher Wert (DBTYPE_BOOL).
adByRef | Wird mit einem logischen OR-Argument mit einem anderen Typ verbunden, um anzugeben, dass es sich bei den Daten um einen Zeiger auf Daten des anderen Typs handelt (DBTYPE_BYREF).
adBSTR | Eine mit Nullzeichen endende Zeichenfolge (Unicode) (DBTYPE_BSTR).
adChar | Ein String-Wert (DBTYPE_STR).
adCurrency | Ein Currency-Wert (DBTYPE_CY). Eine Währungsangabe ist eine Festkommazahl mit vier Stellen hinter dem Komma. Sie wird als 8 Byte umfassende Ganzzahl mit Vorzeichen, skaliert mit 10.000, gespeichert.
adDate | Ein Date-Wert (DBTYPE_DATE). Ein Datum wird als Wert vom Typ Double gespeichert, dessen Ganzzahlanteil die Anzahl der Tage seit dem 30. Dezember 1899 darstellt. Bei dem Bruchteil des Double handelt es sich um den Bruchteil des Tages.
adDBDate | Ein Datumswert (jjjjmmtt) (DBTYPE_DBDATE).
adDBTime | Ein Zeitwert (hhmmss) (DBTYPE_DBTIME).
adDBTimeStamp | Eine Datum-Zeit-Marke (jjjjmmtthhmmss plus ein Bruch in Milliardstel) (DBTYPE_DBTIMESTAMP).
adDecimal | Ein exakter numerischer Wert mit einer festen Genauigkeit und Skalierung (DBTYPE_DECIMAL).
adDouble | Ein Gleitpunktwert mit doppelter Genauigkeit (DBTYPE_R8).
adEmpty | Kein Wert wurde festgelegt (DBTYPE_EMPTY).
adError | Ein 32-Bit-Fehlercode (DBTYPE_ERROR).
adGUID | Ein globaler eindeutiger Bezeichner (Globally Unique Identifier, GUID) (DBTYPE_GUID).
adIDispatch | Ein Zeiger auf eine IDispatch-Schnittstelle in einem OLE-Objekt (DBTYPE_IDISPATCH).
adInteger | Eine 4 Byte umfassende Ganzzahl mit Vorzeichen (DBTYPE_I4).
adIUnknown | Ein Zeiger auf eine IUnknown-Schnittstelle in einem OLE-Objekt (DBTYPE_IUNKNOWN).
adLongVarBinary | Ein langer Binärwert (nur Parameter-Objekt).
adLongVarChar | Ein langer String-Wert (nur Parameter-Objekt).
adLongVarWChar | Ein langer, mit Nullzeichen endender Zeichenfolgenwert (nur Parameter-Objekt).
adNumeric | Ein exakter numerischer Wert mit einer festen Genauigkeit und Skalierung (DBTYPE_NUMERIC).
adSingle | Ein Gleitpunktwert mit einzelner Genauigkeit (DBTYPE_R4).
adSmallInt | Eine 2 Byte umfassende Ganzzahl mit Vorzeichen (DBTYPE_I2).
adTinyInt | Eine 1 Byte umfassende Ganzzahl mit Vorzeichen (DBTYPE_I1).
adUnsignedBigInt | Eine 8 Byte umfassende Ganzzahl ohne Vorzeichen (DBTYPE_UI8).
adUnsignedInt | Eine 4 Byte umfassende Ganzzahl ohne Vorzeichen (DBTYPE_UI4).
adUnsignedSmallInt | Eine 2 Byte umfassende Ganzzahl ohne Vorzeichen (DBTYPE_UI2).
adUnsignedTinyInt | Eine 1 Byte umfassende Ganzzahl ohne Vorzeichen (DBTYPE_UI1).
adUserDefined | Eine benutzerdefinierte Variable (DBTYPE_UDT).
adVarBinary | Ein Binärwert (nur Parameter-Objekt).
adVarChar | Ein String-Wert (nur Parameter-Objekt).
adVariant | Ein Variant-Wert für die Automatisierung (DBTYPE_VARIANT).
adVector | Wird durch ein logisches OR-Argument mit einem anderen Typ verbunden, um anzugeben, dass die Daten die durch OLE DB definierte DBVECTOR-Struktur besitzen. Diese Struktur enthält eine Anzahl von Elementen und einen Zeiger auf die Daten des anderen Typs (DBTYPE_VECTOR).
adVarWChar | Eine mit Nullzeichen endende Unicode-Zeichenfolge (nur Parameter-Objekt).
adWChar | Eine mit Nullzeichen endende Zeichenfolge (Unicode) (DBTYPE_WSTR).

Hinweise

Für Parameter-Objekte bietet die Type-Eigenschaft Schreib-/Lesezugriff. Bei allen anderen Objekte ist die Type-Eigenschaft schreibgeschützt.


UnderlyingValue-Eigenschaft (ADO)

UnderlyingValue-Eigenschaft

Gibt den aktuellen Wert eines Field-Objekts in der Datenbank an.

Rückgabewert

Gibt einen Variant-Wert zurück.

Hinweise

Verwenden Sie die UnderlyingValue-Eigenschaft, um den aktuellen Feldwert aus der Datenbank zurückzugeben. Der Feldwert in der UnderlyingValue-Eigenschaft ist der Wert, der in Ihrer Transaktion angezeigt wird und bei dem es sich um das Ergebnis einer vor kurzem durchgeführten Aktualisierung durch eine andere Transaktion handeln kann. Dieser Wert kann sich von der OriginalValue-Eigenschaft unterscheiden, die den ursprünglich an das Recordset-Objekt zurückgegebenen Wert widerspiegelt.

Diese Eigenschaft ähnelt dem Verwenden der Resync-Methode. Die UnderlyingValue-Eigenschaft gibt jedoch nur den Wert für ein bestimmtes Feld aus dem aktuellen Datensatz zurück. Dies ist der gleiche Wert, den die Resync-Methode zum Ersetzen der Value-Eigenschaft verwendet.

Wenn Sie diese Eigenschaft mit der OriginalValue-Eigenschaft verwenden, können Sie aus Stapelaktualisierungen resultierende Konflikte auflösen.


Value-Eigenschaft (ADO)

Value-Eigenschaft

Gibt den Wert an, der einem Field-, Parameter- oder Property-Objekt zugewiesen ist.

Einstellungen und Rückgabewerte

Legt einen Variant-Wert fest oder gibt diesen Wert zurück. Der Standardwert hängt von der Type-Eigenschaft ab.

Hinweise

Verwenden Sie die Value-Eigenschaft, um Daten von Field-Objekten, Parameterwerte mit Parameter-Objekten oder die Eigenschaftseinstellungen mit Property-Objekten festzulegen oder zurückzugeben. Ob die Value-Eigenschaft Schreib-/Lesezugriff bietet oder ob sie schreibgeschützt ist, hängt von zahlreichen Faktoren ab - weitere Informationen zu den jeweiligen Objekten erhalten Sie unter den entsprechenden Themen.

ADO ermöglicht das Festlegen und Zurückgeben von langen Binärdaten mit der Value-Eigenschaft.

Anmerkung Bei Parameter-Objekten liest ADO die Value-Eigenschaft lediglich einmal vom Provider. Enthält ein Befehl einen Parameter, dessen Value-Eigenschaft leer ist, und erstellen Sie von diesem Befehl ein Recordset-Objekt, dann stellen Sie sicher, dass Sie das Recordset-Objekt schließen, bevor Sie die Value-Eigenschaft abrufen. Andernfalls ist bei einigen Providern die Value-Eigenschaft möglicherweise leer und enthält nicht den richtigen Wert.


Version-Eigenschaft (ADO)

Version-Eigenschaft

Gibt die ADO-Versionsnummer an.

Rückgabewert

Gibt einen String-Wert zurück.

Hinweise

Verwenden Sie die Version-Eigenschaft, um die Versionsnummer der ADO-Implementierung zurückzugeben.

Die Version des Providers steht als dynamische Eigenschaft in der Properties-Auflistung zur Verfügung.


Dynamische Eigenschaften von ADO

Dynamische Eigenschaften von ADO - Zusammenfassung

Eigenschaft | Beschreibung
Name | Gibt einen Namen für das Recordset-Objekt an.
Unique Table, Unique Schema, Unique Catalog | Unique Table gibt den Namen der einen Basistabelle an, in der Aktualisieren, Einfügen und Löschen erlaubt ist. Unique Schema gibt das Schema oder den Namen des Eigentümers der Tabelle an. Unique Catalog gibt den Katalog oder den Namen der Datenbank an, in dem/der die Tabelle enthalten ist.
Resync Command | Gibt eine vom Benutzer zur Verfügung gestellte Befehlszeichenfolge an, die von der Resync-Methode zum Aktualisieren der Daten in der Tabelle verwendet wird, die in der dynamischen Eigenschaft Unique Table angegeben wurde.
Update Resync | Gibt an, ob die UpdateBatch-Methode von einer impliziten Resync-Methodenoperation gefolgt ist, und wenn ja, den Umfang dieser Operation.


Name-Eigenschaft - Dynamisch (ADO)

Name-Eigenschaft - Dynamisch

Gibt einen Namen für das Recordset-Objekt an.

Rückgabewerte

Gibt einen String-Wert zurück, der den Namen des Recordset-Objekts enthält.

Hinweise

Namen bleiben so lange bestehen, wie die Verbindung besteht, oder bis das Recordset-Objekt geschlossen wird.

Die Name-Eigenschaft wird hauptsächlich mit dem Restrukturierungs-Feature des Microsoft Data Shaping Service für OLE DB-Serviceproviders verwendet. Namen müssen eindeutig sein, damit sie an der Restrukturierung teilnehmen können.

Diese Eigenschaft ist schreibgeschützt, kann aber bei der Erstellung eines Recordset-Objekts indirekt festgelegt werden. Wenn beispielsweise eine Klausel eines SHAPE-Befehls ein Recordset-Objekt erstellt und ihm mit dem Schlüsselwort "AS" einen Aliasnamen gibt, dann wird der Alias der Name-Eigenschaft zugewiesen. Wenn kein Alias deklariert wird oder ein Konflikt des Alias mit einem bereits vorhandenen Namen auftritt, dann wird der Name-Eigenschaft ein Name zugewiesen, der von dem Shape-Provider erzeugt wird.

Verwenden Sie die Name-Eigenschaft, wenn Sie in einem SHAPE-Befehl auf ein Recordset-Objekt Bezug nehmen wollen, seinen Namen aber nicht kennen, da er von MSDataShape erzeugt wurde. In diesem Fall könnten Sie einen SHAPE-Befehl erzeugen, indem Sie die Zeichenfolge, die von der Name-Eigenschaft zurückgegeben wird, links und rechts mit dem Befehl verketten.

Bei Name handelt es sich um eine dynamische Eigenschaft, die an die Properties-Auflistung des Recordset-Objekts angehängt wird, wenn die CursorLocation-Eigenschaft auf adUseClient gesetzt wird.


Unique Table-, Unique Schema-, Unique Catalog-Eigenschaften - Dynamisch (ADO)

Unique Table-, Unique Schema-, Unique Catalog-Eigenschaften - Dynamisch

Ermöglicht Ihnen die genaue Kontrolle über Änderungen an einer bestimmten Basistabelle in einem Recordset-Objekt, die durch eine JOIN-Operation über mehrere Basistabellen gebildet wurde.

  • Unique Table gibt den Namen der einen Basistabelle an, in der Aktualisieren, Einfügen und Löschen erlaubt ist.

  • Unique Schema gibt das Schema oder den Namen des Eigentümers der Tabelle an.

  • Unique Catalog gibt den Katalog oder den Namen der Datenbank an, in dem/der die Tabelle enthalten ist.

Einstellungen und Rückgabewerte

Legt einen String-Wert fest oder gibt diesen Wert zurück, bei dem es sich um den Namen einer Tabelle, eines Schemas oder eines Katalogs handelt.

Hinweise

Die gewünschte Basistabelle wird durch ihren Katalognamen, Schemanamen und Tabellennamen eindeutig identifiziert. Wenn die Unique Table-Eigenschaft festgelegt wurde, werden die Werte der Unique Schema- oder Unique Catalog-Eigenschaften zum Auffinden der Basistabelle verwendet. Es ist sinnvoll, aber nicht unbedingt erforderlich, daß entweder die Unique Schema- oder die Unique Catalog-Eigenschaft oder beide Eigenschaften festgelegt werden, bevor die Unique Table-Eigenschaft festgelegt wird.

Der Primärschlüssel der Unique Table wird als Primärschlüssel des gesamten Recordset-Objekts behandelt. Dieser Schlüssel wird für alle Methoden verwendet, die einen Primärschlüssel erfordern.

Solange Unique Table festgelegt ist, haben die AddNew-, Delete-, Resync, Update- und UpdateBatch-Methoden nur einen Einfluss auf die angegebene Tabelle.

Wenn eine eindeutige Basistabelle nicht gefunden wird, hat dies einen Laufzeitfehler zur Folge.

Diese dynamischen Eigenschaften werden alle an die Properties-Auflistung des Recordset-Objekts angehängt, wenn die CursorLocation-Eigenschaft auf adUseClient gesetzt wird.


Resync Command-Eigenschaft - Dynamisch (ADO)

Resync Command-Eigenschaft - Dynamisch

Gibt eine vom Benutzer zur Verfügung gestellte Befehlszeichenfolge an, die von der Resync-Methode zum Aktualisieren der Daten in der Tabelle ausgegeben wird, die in der dynamischen Eigenschaft Unique Table angegeben wurde.

Einstellungen und Rückgabewerte

Legt einen String-Wert fest oder gibt diesen Wert zurück, bei dem es sich um eine Befehlszeichenfolge handelt.

Hinweise

Das Recordset-Objekt ist das Ergebnis einer JOIN-Operation, die über mehrere Basistabellen ausgeführt wurde. Welche Zeilen betroffen sind, hängt von dem AffectRecords-Parameter der Resync-Methode ab.Wenn die Unique Table- und Resync Command-Eigenschaften nicht festgelegt sind, wird die Resync-Standardmethode ausgeführt.

Die Befehlszeichenfolge der Resync Command-Eigenschaft ist ein parametrisierter Befehl oder eine gespeicherte Prozedur, die die zu aktualisierende Zeile eindeutig identifiziert und eine einzelne Zeile zurückgibt. Diese enthält dieselbe Anzahl und Reihenfolge der Spalten wie die zu aktualisierende Zeile. Die Befehlszeichenfolge enthält einen Parameter für jede Primärschlüsselspalte in der Unique Table. Anderenfalls wird ein Laufzeitfehler zurückgegeben. Die Parameter werden automatisch mit Primärschlüsselwerten aus der zu aktualisierenden Zeile ausgefüllt.

Im Folgenden finden Sie zwei auf SQL basierende Beispiele:

1) Das Recordset-Objekt wird durch einen Befehl definiert:

SELECT * FROM Customers JOIN Orders ON
    Customers.CustomerID = Orders.CustomerID
    WHERE city = ‘Seattle’
    ORDER BY CustomerID

Die Resync Command-Eigenschaft ist wie folgt festgelegt:

"SELECT * FROM
    (SELECT * FROM Customers JOIN Orders
    ON Customers.CustomerID = Orders.CustomerID
    city = ‘Seattle’ ORDER BY CustomerID)
WHERE Orders.OrderID = ?"

Die Unique Table ist Orders, und ihr Primärschlüssel, OrderID, ist parametrisiert. Die Subselektion bietet einen einfachen Weg, in einem Programm sicherzustellen, dass die gleiche Anzahl und Reihenfolge der Spalten zurückgegeben wird wie durch den ursprünglichen Befehl.

2) Das Recordset-Objekt wird durch eine gespeicherte Prozedur definiert:

CREATE PROC Custorders @CustomerID char(5) AS
SELECT * FROM Customers JOIN Orders ON
Customers.CustomerID = Orders.CustomerID
WHERE Customers.CustomerID = @CustomerID

Die Resync-Methode sollte die folgende gespeicherte Prozedur ausführen:

CREATE PROC CustordersResync @ordid int AS
SELECT * FROM Customers JOIN Orders ON
Customers.CustomerID = Orders.CustomerID
WHERE Orders.ordid  = @ordid

Die Resync Command-Eigenschaft ist wie folgt festgelegt:

"{call CustordersResync (?)}"

Wieder ist Orders die Unique Table, und ihr Primärschlüssel, OrderID, ist parametrisiert.

Bei Resync Command handelt es sich um eine dynamische Eigenschaft, die an die Properties-Auflistung des Recordset-Objekts angehängt wird, wenn die CursorLocation-Eigenschaft auf adUseClient gesetzt wird.


Update Resync-Eigenschaft - Dynamisch (ADO)

Update Resync-Eigenschaft - Dynamisch

Gibt an, ob die UpdateBatch-Methode von einer impliziten Resync-Methodenoperation gefolgt ist, und wenn ja, den Umfang dieser Operation.

Einstellungen und Rückgabewerte

Legt einen der folgenden CEResyncEnum-Werte fest oder gibt einen der Werte zurück:

Konstante | Beschreibung
adResyncNone | Rufe Resync nicht auf.
adResyncAutoIncrement | (Voreinstellung) Rufe Resync für alle erfolgreich eingefügten Zeilen auf, einschließlich der Werte ihrer AutoIncrement-Spalten.
adResyncConflicts | Rufe Resync für alle Zeilen auf, in denen die Update- oder Delete-Operation wegen eines Parallelitätskonflikts fehlgeschlagen ist.
adResyncUpdates | Rufe Resync für alle erfolgreich aktualisierten Zeilen auf.
adResyncInserts | Rufe Resync für alle erfolgreich eingefügten Zeilen auf, einschließlich der Werte ihrer Identity-Spalten.
adResyncAll | Rufe Resync für jede Zeile auf, bei der Änderungen anstehen.

Hinweise

Diese Eigenschaft ist nur anwendbar, wenn die dynamische Eigenschaft Unique Table festgelegt wurde.

Die Konstanten adResyncAutoIncrement und adResyncConflicts können gleichzeitig verwendet werden. Die Konstanten adResyncAll, adResyncUpdates, adResyncInserts und adResyncConflicts können gleichzeitig verwendet werden.

Die Konstante adResyncConflicts speichert die Resync-Werte als zugrunde liegende Werte, überschreibt aber keine anstehenden Änderungen.

Bei Update Resync handelt es sich um eine dynamische Eigenschaft, die an die Properties-Auflistung des Recordset-Objekts angehängt wird, wenn die CursorLocation-Eigenschaft auf adUseClient gesetzt wird.


Verwenden von Providern mit ADO

Dieser Abschnitt behandelt drei Arten von Providern: Datenprovider, Dienstprovider und Servicekomponenten. Es gibt zwei Gruppen von Providern: solche, die Daten anbieten und solche, die Dienstleistungen anbieten. Ein Datenprovider verfügt über eigene Daten und macht sie für die Anwendung des Kunden in tabellarischer Form verfügbar. Ein Serviceprovider bietet Service an, indem er Daten erstellt und verarbeitet, die den Funktionsumfang in Ihren ADO-Anwendungen erweitern. Ein Serviceprovider ist möglicherweise auch weiter als eine Servicekomponente definiert, die in Verbindung mit anderen Serviceprovidern oder Komponenten arbeiten muss.

Datenprovider

Die Leistungsfähigkeit und Flexibilität von ADO liegt zum größten Teil darin, dass es basierend auf demselben Programmiermodell eine Verbindung zu unterschiedlichen Datenprovidern herstellen kann, unabhängig von den besonderen Features jedes einzelnen Providers.

Da jeder Datenprovider aber einzigartig ist, kommt es bei den verschiedenen Datenprovidern zu einem unterschiedlichen Interaktionsverhalten Ihrer Anwendung mit ADO. Die entscheidenden Unterschiede können in der Regel in eine der drei Kategorien eingeordnet werden:

  • Verbindungsparameter in der ConnectionString-Eigenschaft.

  • Verwendung des Command-Objekts.

  • Providerspezifisches Verhalten der Recordset-Objekte.

Providerspezifische Details für jeden der drei Bereiche werden für alle Datenprovider, die momentan von Microsoft zur Verfügung gestellt werden, in der folgenden Tabelle aufgelistet.

Bereich | Thema
ODBC-Datenbank | Microsoft OLE DB-Provider für ODBC
Microsoft® Index Server | Microsoft OLE DB-Provider für Microsoft Index Server
Microsoft® Active Directory Service | Microsoft OLE DB-Provider für Microsoft Active Directory Service
Microsoft® Jet-Datenbanken | OLE DB-Provider für Microsoft Jet
Microsoft® SQL Server | Microsoft OLE DB-Provider für SQL Server
Oracle-Datenbanken | Microsoft OLE DB-Provider für Oracle

Providerspezifische dynamische Eigenschaften

Die Properties-Auflistungen der Connection-, Command- und Recordset-Objekte schließen dynamische Eigenschaften ein, die bei jedem Provider unterschiedlich sind. Diese Eigenschaften enthalten Informationen über die besondere Funktionalität eines Providers, die über die von ADO unterstützten integrierten Eigenschaften hinausgehen.

Nachdem die Verbindung aufgebaut und diese Objekte erstellt wurden, verwenden Sie die Refresh-Methode in der Properties-Auflistung des Objekts, damit Sie die providerspezifischen Eigenschaften erhalten. Weitere Informationen über diese dynamischen Eigenschaften finden Sie in der Dokumentation des Providers und in der OLE DB Programmer's Reference.

Serviceprovider

Wenn Sie einen Serviceprovider verwenden möchten, müssen Sie dazu ein Schlüsselwort angeben. Sie sollten auch die providerspezifischen dynamischen Eigenschaften beachten, die mit jedem dieser Serviceprovider verbunden sind. Providerspezifische Einzelheiten finden Sie bei allen derzeit von Microsoft verfügbaren Serviceprovidern aufgeführt.

  • Microsoft Data Shaping Service für OLE DB

  • Microsoft OLE DB Persistence Provider

  • Microsoft OLE DB Remoting Provider

Servicekomponenten

Der Cursordienst für die OLE DB-Servicekomponente ergänzt die Cursor-Unterstützungsfunktionen der Datenprovider. Es erfordert auch ein Schlüsselwort und hat dynamische Eigenschaften.

Microsoft Cursor Service für OLE DB

Siehe auch Weitere Informationen über Provider finden Sie in der Dokumentation zu Microsoft OLE DB im Data Access SDK, oder besuchen Sie die Microsoft Data Access-Webseite unter http://www.microsoft.com/data.


Microsoft OLE DB-Provider für ODBC

Für das Programmieren mit ADO oder RDS wäre es ideal, wenn jede Datenquelle auf einer OLE DB-Schnittstelle basieren würde, so dass ADO direkt auf die Datenquelle zugreifen könnte. Obwohl immer mehr Lieferanten von Datenbanken OLE DB-Schnittstellen implementieren, basieren einige Datenquellen noch nicht auf ihnen. Praktisch kann jedoch auf alle derzeit verwendeten DBMS-Systeme über ODBC zugegriffen werden.

Mit dem Microsoft® ODBC-Provider kann ADO eine Verbindung zu jeder ODBC-Datenquelle herstellen. ODBC-Treiber sind für jede größere heutzutage verwendete DBMS verfügbar, wie z. B. Microsoft® SQL Server™, Microsoft Access (Microsoft Jet-Datenbankmodul) und Microsoft FoxPro®, und darüber hinaus auch für Datenbankprodukte anderer Hersteller, wie beispielsweise Oracle. Der Provider ist free-threaded und Unicode ist aktiviert.

Der Provider unterstützt Transaktionen, wobei auch unterschiedliche DBMS-Module verschiedene Arten von Transaktionsunterstützung anbieten. Microsoft Access z. B. unterstützt geschachtelte Transaktionen, die bis zu fünf Ebenen tief sind.

Dies ist der Standardprovider für ADO, der in Verbindung mit Microsoft SQL Server 6.5 alle providerabhängigen Eigenschaften und Methoden von ADO unterstützt, außer die in den Hilfethemen zur ADO-Sprache genannten Ausnahmen.

Parameter der Verbindungszeichenfolge

Wenn Sie eine Verbindung zu diesem Provider herstellen möchten, müssen Sie das Argument Provider= der ConnectionString-Eigenschaft folgendermaßen festlegen:

MSDASQL

Beim Lesen der Provider-Eigenschaft wird diese Zeichenfolge ebenfalls zurückgegeben.

Da dies der Standardprovider für ADO ist, wird ADO versuchen, eine Verbindung zu diesem Provider herzustellen, wenn Sie den Parameter Provider= in der Verbindungszeichenfolge nicht angeben.

Der Provider unterstützt neben den durch ADO definierten Parametern keine besonderen Verbindungsparameter. Der Provider übergibt jedoch alle Verbindungsparameter, die nicht von ADO sind, an den ODBC-Treiber-Manager.

Da Sie den Parameter Provider übergehen können, können Sie eine ADO-Verbindungszeichenfolge erstellen, die mit einer ODBC-Verbindungszeichenfolge für dieselbe Datenquelle übereinstimmt. Verwenden Sie dazu dieselben Paramenternamen (DRIVER=, DATABASE=, DSN=, usw.), Werte und dieselbe Syntax wie für das Erstellen einer ODBC-Verbindungszeichenfolge. Sie können eine Verbindung mit oder ohne einen vorgegebenen Datenquellnamen (Data Source Name, DSN) oder Datei-DSN herstellen.

Syntax mit DSN oder Datei-DSN:

"[Provider=MSDASQL;] { DSN=Name | FileDSN=Dateiname } ; [DATABASE=Datenbank;] UID=Benutzer; PWD=Kennwort"

Syntax ohne DSN (Verbindung ohne DSN):

"[Provider=MSDASQL;] DRIVER=Treiber; SERVER=Server; DATABASE=Datenbank; UID=Benutzer; PWD=Kennwort"

Wenn Sie einen DSN- oder FileDSN-Parameter verwenden, muss dieser über den ODBC-Administrator in der Systemsteuerung von Windows definiert sein. Alternativ zur Angabe eines DSN-Parameters können Sie auch den ODBC-Treiber (DRIVER=), beispielsweise "SQLServer", den Servernamen (SERVER=) und den Datenbanknamen (DATABASE=) angeben.

Sie können auch einen Namen für das Benutzerkonto (UID=) und das Kennwort für das Benutzerkonto (PWD=) in den ODBC-spezifischen Parametern oder in den standardmäßig durch ADO definierten Parametern User ID und Password festlegen. Wenn Sie sowohl die ADO- als auch die ODBC-spezifischen Parameter für diese Werte angeben, haben die ADO-Parameter Priorität.

Obwohl durch eine DSN-Definition bereits eine Datenbank angegeben ist, können Sie einen DATABASE-Parameter zusätzlich zu einem DSN-Parameter angeben, um eine Verbindung zu einer anderen Datenbank herzustellen. Dadurch wird die DSN-Definition so geändert, dass die angegebene Datenbank eingeschlossen wird. Es ist immer von Vorteil, den DATABASE-Parameter einzuschließen, wenn Sie einen DSN-Parameter verwenden. Dadurch wird sichergestellt, dass die Verbindung zur richtigen Datenbank hergestellt wird, auch wenn eine andere Person den Parameter für die Standarddatenbank verändert hat, nachdem Sie die DSN-Definition zuletzt überprüft haben.

Befehlstext

Die Art der Verwendung des Command-Objekts hängt hauptsächlich von der Datenquelle ab und davon, welche Art von Abfrage oder Befehlsanweisung diese akzeptiert.

ODBC verfügt über eine besondere Syntax zum Aufrufen gespeicherter Prozeduren. Übergeben Sie eine Zeichenfolge mit der folgenden Syntax für die CommandText-Eigenschaft eines Command-Objekts, das CommandText-Argument an die Execute-Methode eines Connection-Objekts oder das Source-Argument an die Open-Methode eines Recordset-Objekts:

"{ [ ? = ] call Prozedur [ ( ? [, ? [ , … ]] ) ] }"

Wobei jedes ? auf ein Objekt in der Parameters-Auflistung verweist. Das erste ? verweist auf Parameters(0), das nächste ? verweist auf Parameters(1) usw.

Die Parameterverweise sind optional und hängen von der Struktur der gespeicherten Prozedur ab. Wenn Sie eine gespeicherte Prozedur aufrufen möchten, die keine Parameter definiert, sieht die Zeichenfolge folgendermaßen aus:

"{ call Prozedur }"

Bei zwei Abfrageparametern sieht die Zeichenfolge folgendermaßen aus:

"{ call Prozedur ( ?, ? ) }"

Wenn die gespeicherte Prozedur einen Wert zurückgibt, wird der Rückgabewert wie ein weiterer Parameter behandelt. Wenn keine Abfrageparameter vorhanden sind, aber ein Wert zurückgegeben wird, sieht die Zeichenfolge folgendermaßen aus:

"{ ? = call Prozedur }"

Und wenn ein Rückgabewert und zwei Abfrageparameter vorhanden sind, sieht die Zeichenfolge folgendermaßen aus:

"{ ? = call Prozedur ( ?, ? ) }"

Verhalten des Recordset-Objekts

In der folgenden Tabelle sind die standardmäßigen ADO-Methoden und -Eigenschaften aufgelistet, die in einem mit diesen Provider geöffneten Recordset-Objekt zur Verfügung stehen.

Weitere Informationen über das Verhalten von Recordset-Objekten für Ihre Providerkonfiguration erhalten Sie, wenn Sie die Supports-Methode ausführen und die Properties-Auflistung des Recordset-Objekts angeben, um zu ermitteln, ob die providerspezifischen dynamischen Eigenschaften vorhanden sind.

Verfügbarkeit standardmäßiger Recordset-Eigenschaften von ADO:

Eigenschaft | Vorwärts | Dynamisch | Schlüsselgruppe | Statisch
AbsolutePage | nicht verfügbar | nicht verfügbar | Lesen/Schreiben | Lesen/Schreiben
AbsolutePosition | nicht verfügbar | nicht verfügbar | Lesen/Schreiben | Lesen/Schreiben
ActiveConnection | Lesen/Schreiben | Lesen/Schreiben | Lesen/Schreiben | Lesen/Schreiben
BOF | Schreibgeschützt | Schreibgeschützt | Schreibgeschützt | Schreibgeschützt
Bookmark | nicht verfügbar | nicht verfügbar | Lesen/Schreiben | Lesen/Schreiben
CacheSize | Lesen/Schreiben | Lesen/Schreiben | Lesen/Schreiben | Lesen/Schreiben
CursorLocation | Lesen/Schreiben | Lesen/Schreiben | Lesen/Schreiben | Lesen/Schreiben
CursorType | Lesen/Schreiben | Lesen/Schreiben | Lesen/Schreiben | Lesen/Schreiben
EditMode | Schreibgeschützt | Schreibgeschützt | Schreibgeschützt | Schreibgeschützt
EOF | Schreibgeschützt | Schreibgeschützt | Schreibgeschützt | Schreibgeschützt
Filter | Lesen/Schreiben | Lesen/Schreiben | Lesen/Schreiben | Lesen/Schreiben
LockType | Lesen/Schreiben | Lesen/Schreiben | Lesen/Schreiben | Lesen/Schreiben
MarshalOptions | Lesen/Schreiben | Lesen/Schreiben | Lesen/Schreiben | Lesen/Schreiben
MaxRecords | Lesen/Schreiben | Lesen/Schreiben | Lesen/Schreiben | Lesen/Schreiben
PageCount | nicht verfügbar | nicht verfügbar | Schreibgeschützt | Schreibgeschützt
PageSize | Lesen/Schreiben | Lesen/Schreiben | Lesen/Schreiben | Lesen/Schreiben
RecordCount | nicht verfügbar | nicht verfügbar | Schreibgeschützt | Schreibgeschützt
Source | Lesen/Schreiben | Lesen/Schreiben | Lesen/Schreiben | Lesen/Schreiben
State | Schreibgeschützt | Schreibgeschützt | Schreibgeschützt | Schreibgeschützt
Status | Schreibgeschützt | Schreibgeschützt | Schreibgeschützt | Schreibgeschützt

Die Eigenschaften AbsolutePosition und AbsolutePage sind lesegeschützt, wenn ADO mit der Version 1.0 von Microsoft OLE DB-Provider für ODBC verwendet wird.

Verfügbarkeit standardmäßiger Recordset-Methoden von ADO:

Methode | Vorwärts | Dynamisch | Schlüsselgruppe | Statisch
AddNew | Ja | Ja | Ja | Ja
Cancel |  |  |  |
CancelBatch | Ja | Ja | Ja | Ja
CancelUpdate | Ja | Ja | Ja | Ja
Clone | Nein | Nein | Ja | Ja
Close | Ja | Ja | Ja | Ja
Delete | Ja | Ja | Ja | Ja
GetRows | Ja | Ja | Ja | Ja
Move | Ja | Ja | Ja | Ja
MoveFirst | Ja | Ja | Ja | Ja
MoveLast | Nein | Ja | Ja | Ja
MoveNext | Ja | Ja | Ja | Ja
MovePrevious | Nein | Ja | Ja | Ja
NextRecordset* | Ja | Ja | Ja | Ja
Open | Ja | Ja | Ja | Ja
Requery | Ja | Ja | Ja | Ja
Resync | Nein | Nein | Ja | Ja
Supports | Ja | Ja | Ja | Ja
Update | Ja | Ja | Ja | Ja
UpdateBatch | Ja | Ja | Ja | Ja

*Bei Microsoft Access-Datenbanken nicht unterstützt.

Siehe auch Besondere Einzelheiten über das Implementieren sowie funktionale Informationen über den Microsoft OLE DB-Provider für ODBC entnehmen Sie bitte der Dokumentation zu Microsoft OLE DB-Provider für ODBC und der Microsoft OLE DB Programmer's Reference, die im Data Access SDK verfügbar sind. Sie können außerdem auch auf die Data Access-Webseite unter http://www.microsoft.com/data zugreifen.


Microsoft OLE DB-Provider für Microsoft Index Server

Der Microsoft OLE DB-Provider für Microsoft Index Server verfügt über einen programmgesteuerten schreibgeschützten Zugriff auf das Dateisystem und auf Webdaten, die durch Microsoft® Index Server 2.0 indiziert wurden. ADO-Anwendungen können SQL-Abfragen ausgeben, um Informationen über den Inhalt und die Dateieigenschaften abzurufen.

Der Provider ist free-threaded und Unicode ist aktiviert.

Parameter der Verbindungszeichenfolge

Wenn Sie eine Verbindung zu diesem Provider herstellen möchten, müssen Sie das Argument Provider= der ConnectionString-Eigenschaft folgendermaßen setzen:

MSIDXS

Beim Lesen der Provider-Eigenschaft wird diese Zeichenfolge ebenfalls zurückgegeben.

Befehlstext

Die SQL-Abfragesyntax von Index Server besteht aus Erweiterungen der SQL92 SELECT-Anweisung und den Klauseln FROM und WHERE. Die Ergebnisse der Abfrage werden über OLE DB-Rowsets zurückgegeben, die von ADO verarbeitet und als Recordset-Objekte verändert werden können.

Sie können nach bestimmten Wörtern oder Ausdrücken suchen sowie Platzhalter verwenden, um nach Wortmustern oder -stämmen zu suchen. Die Suchlogik kann auf booleschen Entscheidungen basieren, d. h. der Gewichtung nach der Nähe von Begriffen zu anderen Wörtern. Sie können jedoch auch nach "freiem Text" suchen; bei dieser Suche wird nach Übereinstimmungen auf der Grundlage der Wortbedeutung statt nach exakten Wortlauten gesucht.

Der spezielle Befehlsdialekt ist in der Microsoft Index Server-Referenz unter "SQL-Zugriff auf Index Server-Daten" ausführlich dokumentiert.

Der Provider akzeptiert keine Aufrufe von gespeicherten Prozeduren oder einfache Tabellennamen (die CommandType-Eigenschaft ist z. B. immer adCmdText).

Verhalten des Recordset-Objekts

In der folgenden Tabelle sind die Features aufgelistet, die bei einem mit diesem Provider geöffneten Recordset-Objekt zur Verfügung stehen. Nur der statische Cursortyp (adOpenStatic) ist verfügbar.

Weitere Informationen über das Verhalten von Recordset-Objekten für Ihre Providerkonfiguration erhalten Sie, wenn Sie die Supports-Methode ausführen und die Properties-Auflistung des Recordset-Objekts angeben, um zu ermitteln, ob die providerspezifischen dynamischen Eigenschaften vorhanden sind.

Verfügbarkeit standardmäßiger Recordset-Eigenschaften von ADO:

Eigenschaft | Verfügbarkeit
AbsolutePage | Lesen/Schreiben
AbsolutePosition | Lesen/Schreiben
ActiveConnection | Schreibgeschützt
BOF | Schreibgeschützt
Bookmark* | Lesen/Schreiben
CacheSize | Lesen/Schreiben
CursorLocation | immer adUseServer
CursorType | immer adOpenStatic
EditMode | immer adEditNone
EOF | Schreibgeschützt
Filter | Lesen/Schreiben
LockType | Lesen/Schreiben
MarshalOptions | nicht verfügbar
MaxRecords | Lesen/Schreiben
PageCount | Schreibgeschützt
PageSize | Lesen/Schreiben
RecordCount | Schreibgeschützt
Source | Lesen/Schreiben
State | Schreibgeschützt
Status | Schreibgeschützt

*Beim Provider müssen Lesezeichen aktiviert sein, damit dieses Feature im Recordset-Objekt verfügbar ist.

Verfügbarkeit standardmäßiger Recordset-Methoden von ADO:

Methode | Verfügbar?
AddNew | Nein
Cancel |
CancelBatch | Nein
CancelUpdate | Nein
Clone | Ja
Close | Ja
Delete | Nein
GetRows | Ja
Move | Ja
MoveFirst | Ja
MoveLast | Ja
MoveNext | Ja
MovePrevious | Ja
NextRecordset | Ja
Open | Ja
Requery | Ja
Resync | Ja
Supports | Ja
Update | Nein
UpdateBatch | Nein

Siehe auch Besondere Einzelheiten über das Implementieren sowie funktionale Informationen über den Microsoft OLE DB-Provider für Microsoft Index Server entnehmen Sie bitte der Microsoft OLE DB Programmer's Reference und der Dokumentation zu Microsoft Index Server. Die Webseite zu Microsoft Internet Information Server unter http://www.microsoft.com/germany/backoffice/infoserver/ enthält ebenfalls Informationen über Microsoft Index Server.


Microsoft OLE DB-Provider für Microsoft Active Directory Service

Mit dem Provider von Microsoft® Active Directory Service Interfaces (ADSI) kann ADO über ADSI eine Verbindung zu heterogenen Verzeichnisdiensten herstellen. Dadurch haben ADO-Anwendungen schreibgeschützten Zugriff auf die Verzeichnisdienste von Microsoft® Windows NT® 4.0 sowie auf alle LDAP-kompatiblen Verzeichnisdienste und Novell-Verzeichnisdienste. ADSI basiert auf einem Providermodell. Wenn der Zugriff auf ein anderes Verzeichnis also über einen neuen Provider verfügbar ist, kann die ADO-Anwendung problemlos darauf zugreifen. Der ADSI-Provider ist free-threaded und Unicode ist aktiviert.

Parameter der Verbindungszeichenfolge

Wenn Sie eine Verbindung zu diesem Provider herstellen möchten, müssen Sie das Argument Provider= der ConnectionString-Eigenschaft folgendermaßen setzen:

ADSDSOObject

Beim Lesen der Provider-Eigenschaft wird diese Zeichenfolge ebenfalls zurückgegeben.

Befehlstext

Der Provider erkennt eine Befehlszeichenfolge aus vier Teilen in der folgenden Syntax:

"Ursprung; Filter; Attribute[; Umfang]"

Wert | Beschreibung
Ursprung | Das ADsPath-Objekt, von dem aus die Suche gestartet wird (d. H. der Ursprung der Suche).
Filter | Der Suchfilter im RFC 960-Format.
Attribute | Eine durch Kommas getrennte Liste von Attributen, die zurückgegeben werden.
Umfang Optional. Ein Wert vom Typ String, der den Umfang der Suche angibt. Es kann einer der folgenden Werte sein:
  • Base - nur das Basisobjekt durchsuchen (Ursprung der Suche).

  • OneLevel – nur eine Ebene durchsuchen.

  • Subtree – den gesamten Teilbaum durchsuchen.

Der Provider akzeptiert keine Aufrufe von gespeicherten Prozeduren oder einfache Tabellennamen (die CommandType-Eigenschaft ist z. B. immer adCmdText). Eine vollständige Beschreibung der Befehlstextelemente entnehmen Sie bitte der Dokumentation zu Active Directory Service Interfaces.

Verhalten des Recordset-Objekts

In der folgenden Tabelle sind die Features aufgelistet, die bei einem mit diesem Provider geöffneten Recordset-Objekt zur Verfügung stehen. Nur der statische Cursortyp (adOpenStatic) ist verfügbar.

Weitere Informationen über das Verhalten von Recordset-Objekten für Ihre Providerkonfiguration erhalten Sie, wenn Sie die Supports-Methode ausführen und die Properties-Auflistung des Recordset-Objekts angeben, um zu ermitteln, ob die providerspezifischen dynamischen Eigenschaften vorhanden sind.

Verfügbarkeit standardmäßiger Recordset-Eigenschaften von ADO:

Eigenschaft | Verfügbarkeit
AbsolutePage | Lesen/Schreiben
AbsolutePosition | Lesen/Schreiben
ActiveConnection | Schreibgeschützt
BOF | Schreibgeschützt
Bookmark | Lesen/Schreiben
CacheSize | Lesen/Schreiben
CursorLocation | immer adUseServer
CursorType | immer adOpenStatic
EditMode | immer adEditNone
EOF | Schreibgeschützt
Filter | Lesen/Schreiben
LockType | Lesen/Schreiben
MarshalOptions | nicht verfügbar
MaxRecords | Lesen/Schreiben
PageCount | Schreibgeschützt
PageSize | Lesen/Schreiben
RecordCount | Schreibgeschützt
Source | Lesen/Schreiben
State | Schreibgeschützt
Status | Schreibgeschützt

Verfügbarkeit standardmäßiger Recordset-Methoden von ADO:

Methode | Verfügbar?
AddNew | Nein
Cancel |
CancelBatch | Nein
CancelUpdate | Nein
Clone | Ja
Close | Ja
Delete | Nein
GetRows | Ja
Move | Ja
MoveFirst | Ja
MoveLast | Ja
MoveNext | Ja
MovePrevious | Ja
NextRecordset | Ja
Open | Ja
Requery | Ja
Resync | Ja
Supports | Ja
Update | Nein
UpdateBatch | Nein

Siehe auch Weitere Informationen über ADSI und die besonderen Eigenschaften dieses Providers entnehmen Sie bitte der Dokumentation zum Active Directory Service Interfaces SDK. Sie können das SDK von der ADSI-Webseite unter http://www.microsoft.com/ntserver/info/adsi.htm installieren.


OLE DB-Provider für Microsoft Jet

Mit dem OLE DB-Provider für Microsoft® Jet kann ADO auf Microsoft Jet-Datenbanken zugreifen.

Parameter der Verbindungszeichenfolge

Wenn Sie eine Verbindung zu diesem Provider herstellen möchten, müssen Sie das Argument Provider= der ConnectionString-Eigenschaft folgendermaßen setzen:

Microsoft.Jet.OLEDB.4.0

Beim Lesen der Provider-Eigenschaft wird diese Zeichenfolge ebenfalls zurückgegeben.

Der OLE DB-Provider für Microsoft Jet unterstützt verschiedene providerspezifische Verbindungsparameter zusätzlich zu den von ADO definierten Verbindungsparametern. Wie alle anderen Verbindungsparameter können auch diese Parameter über die Properties-Auflistung eines Connection-Objekts oder als Teil einer Verbindungszeichenfolge gesetzt werden.

Parameter | Beschreibung
Jet OLEDB:System Database | Der Pfad und Dateiname für die Arbeitsgruppen-Informationsdatei
Jet OLEDB:Registry Path | Der Schlüssel in der Windows-Registrierung, der Werte für das Microsoft Jet-Datenbankmodul enthält
Jet OLEDB:Database Password | Das Kennwort für die Datenbank

Standardmäßig öffnet der OLE DB-Provider für Microsoft Jet die Microsoft Jet-Datenbanken im Lesen/Schreiben-Modus. Wenn Sie die Datenbank im schreibgeschützten Modus öffnen möchten, müssen Sie die Mode-Eigenschaft des Connection-Objekts von ADO auf adModeRead setzen.

Verwenden des Command-Objekts

Der Befehlstext im Command-Objekt verwendet den Jet SQL-Befehlsdialekt. Sie können im Befehlstext Abfragen, die Zeilen zurückgeben, Aktionsabfragen und Tabellennamen angeben. Gespeicherte Prozeduren werden jedoch nicht unterstützt und sollten daher nicht angegeben werden.

Verhalten des Recordset-Objekts

Das Microsoft Jet-Datenbankmodul unterstützt keine dynamischen Cursor. Aus diesem Grund unterstützt der OLE DB-Provider für Microsoft Jet den Cursortyp adLockDynamic nicht. Wird ein dynamischer Cursor angefordert, gibt der Provider einen Cursor des Typs Schlüsselgruppe zurück und setzt die CursorType-Eigenschaft neu, um den Typ des zurückgegebenen Recordset-Objekts anzuzeigen. Wird darüber hinaus ein aktualisierbares Recordset-Objekt angefordert (LockType ist adLockOptimistic, adLockBatchOptimistic oder adLockPessimistic), gibt der Provider ebenfalls einen Cursor des Typs Schlüsselgruppe zurück und setzt die CursorType-Eigenschaft neu.

Siehe auch Besondere Einzelheiten über das Implementieren sowie funktionale Informationen über den OLE DB-Provider für Microsoft Jet entnehmen Sie bitte der Dokumentation zu OLE DB-Provider für Microsoft Jet im Data Access SDK.


Microsoft OLE DB Provider für SQL Server

Der Microsoft® OLE DB Provider für SQL Server, SQLOLEDB, ermöglicht ADO den Zugriff auf Microsoft® SQL Server™.

Parameter der Verbindungszeichenfolge

Wenn Sie eine Verbindung zu diesem Provider herstellen möchten, müssen Sie das Argument Provider= der ConnectionString-Eigenschaft folgendermaßen setzen:

SQLOLEDB

Dieser Wert kann auch gesetzt oder gelesen werden, indem Sie die Provider-Eigenschaft verwenden.

Der Provider unterstützt verschiedene providerspezifische Verbindungsparameter zusätzlich zu den von ADO definierten Verbindungsparametern. Wie die ADO-Verbindungseigenschaften können auch diese providerspezifischen Eigenschaften über die Properties-Auflistung eines Connection-Objekts oder als Teil einer Verbindungszeichenfolge gesetzt werden.

Parameter | Beschreibung
Trusted Connection | Benutzerauthentifizierungsmodus. Kann auf True oder False gesetzt sein. Der Standardwert ist False. Ist die Eigenschaft auf True gesetzt, verwendet SQLOLEDB den Microsoft® Windows NT®-Authentifizierungsmodus, um den Benutzerzugriff auf die SQL Server-Datenbank zu erlauben, die durch die Location- und Datasource-Eigenschaftswerte angegeben ist. Ist diese Eigenschaft auf False gesetzt, verwendet SQLOLEDB den gemischten Modus, um den Benutzerzugriff auf die SQL Server-Datenbank zu erlauben. Die Anmeldung und das Kennwort für SQL Server werden in den Eigenschaften User Id und Password angegeben.
Current Language | Ein Sprachenname von SQL Server. Gibt die Sprache an, die für die Auswahl und Formatierung von Systemmeldungen verwendet wird. Die Sprache muss auf dem SQL-Server installiert sein, ansonsten schlägt das Öffnen der Verbindung fehl.
Network Address | Die Netzwerkadresse des SQL-Servers, die durch die Location-Eigenschaft angegeben ist.
Network Library | Der Name der Net-Library (DLL), die für den Datenaustausch mit dem SQL-Server verwendet wird. Der Name darf den Pfad oder die .dll-Dateinamenerweiterung nicht enthalten. Die Voreinstellung ist durch die SQL Server-Clientkonfiguration vorgegeben.
Use Procedure for Prepare | Das Verwenden gespeicherter Prozeduren von SQL Server. Definiert die Verwendung von temporär gespeicherten Prozeduren von SQL Server bei der Vorbereitung von Befehlen.
Auto Translate | OEM/ANSI-Zeichenkonvertierung. Diese Eigenschaft kann auf True oder False gesetzt sein. Der Standardwert ist True. Ist diese Eigenschaft auf True gesetzt, führt SQLOLEDB die OEM/ANSI-Zeichenkonvertierung durch, wenn Multibyte-Zeichenfolgen vom SQL-Server abgerufen oder an ihn geschickt werden. Ist diese Eigenschaft auf False gesetzt, führt SQLOLEDB keine OEM/ANSI-Zeichenkonvertierung bei Multibyte-Zeichenfolgen durch.
Packet Size | Eine Netzwerkpaketgröße in Byte. Der Eigenschaftswert für die Paketgröße muss zwischen 512 und 32767 liegen. Die standardmäßige SQLOLEDB-Netzwerkpaketgröße ist 4096.
Application Name | Der Name der Clientanwendung.
Workstation ID | Eine Zeichenfolge, die die Arbeitsstation angibt.

Verwenden des Command-Objekts

SQLOLEDB akzeptiert eine Mischung aus ODBC, ANSI und SQL Server-spezifischer Transact-SQL als gültige Syntax. Die folgende SQL-Anweisung verwendet z. B. eine Escape-Sequenz von ODBC SQL, um die LCASE-Zeichenfolgenfunktion anzugeben:

SELECT customerid={fn LCASE(CustomerID)} FROM Customers

LCASE gibt eine Zeichenfolge zurück, in der alle Großbuchstaben in Kleinbuchstaben konvertiert sind. Die ANSI SQL-Zeichenfolgenfunktion LOWER führt dieselbe Operation durch, so dass die folgende SQL-Anweisung die ANSI-Entsprechung der oben genannten ODBC-Anweisung darstellt:

SELECT customerid=LOWER(CustomerID) FROM Customers

SQLOLEDB verarbeitet beide Anweisungen erfolgreich, wenn sie als Text für einen Befehl angegeben sind.

Gespeicherte Prozeduren

Wenn Sie eine gespeicherte Prozedur in SQL Server mit einem SQLOLEDB-Befehl ausführen, verwenden Sie die Escape-Sequenz zum Aufrufen einer ODBC-Prozedur im Befehlstext. SQLOLEDB verwendet dann Remote-Prozeduraufrufe für SQL Server, um die Verarbeitung des Befehls zu optimieren. Die folgende ODBC SQL-Anweisung beispielsweise wird als Befehlstext der Transact-SQL vorgezogen:

ODBC SQL

{call SalesByCategory('Hergestellt', '1995')}

Transact-SQL

EXECUTE SalesByCategory 'Hergestellt', '1995'

Verhalten des Recordset-Objekts

SQLOLEDB kann keine SQL Server-Cursor verwenden, um ein aus mehreren Rowsets bestehendes Ergebnis zu unterstützen, das durch mehrere Befehle erstellt wurde. Wenn ein Nutzer ein Recordset abruft, für das eine Unterstützung durch SQL Server-Cursor erforderlich ist, tritt ein Fehler auf, falls der verwendete Befehlstext mehr als einen einzelnen Datensatz als Ergebnis erzeugt.

Scroll-Recordsets von SQLOLEDB werden durch SQL Server-Cursor unterstützt. SQL Server erstellt Beschränkungen für Cursor, die auf Veränderungen durch andere Benutzer der Datenbank reagieren. Im Besonderen können die Zeilen bei manchen Cursorn nicht sortiert werden, und wenn Sie versuchen, ein Rowset mit einem Befehl zu erstellen, der eine SQL ORDER BY-Klausel enthält, schlägt dies u. U. fehl.

Siehe auch Besondere Einzelheiten über das Implementieren sowie funktionale Informationen über den Microsoft SQL Server OLE DB-Provider entnehmen Sie bitte der Dokumentation des Microsoft SQL Server OLE DB-Providers im Data Access SDK.


Microsoft OLE DB-Provider für Oracle

Mit dem Microsoft OLE DB-Provider für Oracle kann ADO auf Oracle-Datenbanken zugreifen.

Parameter der Verbindungszeichenfolge

Wenn Sie eine Verbindung zu diesem Provider herstellen möchten, müssen Sie das Argument Provider= der ConnectionString-Eigenschaft folgendermaßen setzen:

MSDAORA

Beim Lesen der Provider-Eigenschaft wird diese Zeichenfolge ebenfalls zurückgegeben.

Wird in einer Oracle-Datenbank eine verbundene Abfrage mit einem Cursor vom Typ Schlüsselgruppe oder einem dynamischen Cursor ausgeführt, dann tritt ein Fehler auf. Oracle unterstützt nur einen statischen schreibgeschützten Cursor.


Microsoft Data Shaping Service für OLE DB (ADO Service Provider)

Microsoft Data Shaping Service für OLE DB

The Microsoft Data Shaping Service für OLE DB-Serviceprovider unterstützt die Erstellung hierarchischer (strukturierter) Recordset-Objekte von einem oder mehreren Datenprovider(n).

Schlüsselwort des Providers

Geben Sie zum Aufrufen des Data Shaping Service für OLE DB das folgende Schlüsselwort und den Wert in der Verbindungszeichenfolge an.

"Provider=MSDataShape"

Dynamische Eigenschaften

Wenn dieser Serviceprovider aufgerufen wird, werden der Properties-Auflistung des Connection-Objekts die folgenden dynamischen Eigenschaften hinzugefügt.

Name der dynamischen Eigenschaft | Beschreibung
Unique Reshape Names | Gibt an, ob der Wert, welcher der Name-Eigenschaft eines Recordset zugewiesen ist, mit einem bereits vorhandenen Namen in Konflikt geraten könnte. Besitzt diese Eigenschaft den Wert True, dann wird ein eindeutiger Name generiert; andernfalls bestehen beide Namen nebeneinander.
Data Provider | Gibt den Namen des Providers an, der zu strukturierende Zeilen zur Verfügung stellt.

Sie können auch überschreibbare dynamische Eigenschaften setzen, indem Sie die entsprechenden Namen als Schlüsselwörter in der Verbindungszeichenfolge angeben. So können Sie beispielsweise in Visual Basic die dynamische Eigenschaft Data Provider auf "MSDASQL" setzen, indem Sie Folgendes angeben:

Dim cn As New ADODB.Connection
cn.Open "Provider=MSDataShape;Data Provider=MSDASQL"

Ebenso können Sie eine dynamische Eigenschaft setzen oder abrufen,indem Sie den entsprechenden Namen als Index für die Properties-Eigenschaft angeben. Rufen Sie beispielsweise den derzeitigen Wert der dynamischen Eigenschaft Data Provider ab und drucken Sie ihn aus. Anschließend setzen Sie einen neuen Wert, wie z. B. diesen:

Debug.Print cn.Properties("Data Provider")
cn.Properties("Data Provider") = "MSDASQL"

Weitere Informationen zum Strukturieren von Daten finden Sie unter Data Shaping.


Microsoft OLE DB Persistence Provider (ADO Service Provider)

Microsoft OLE DB Persistence Provider

Der Microsoft OLE DB Persistence Provider ermöglicht Ihnen, ein Recordset-Objekt in eine Datei zu speichern und dieses später aus der Datei wieder herzustellen. Schemainformationen, Daten und Änderungen, die noch nicht bestätigt wurden, werden bewahrt.

Speichern können Sie das Recordset entweder im proprietären Format Advanced Data Table Gram (ADTG) oder im offenen Format Extensible Markup Language (XML).

Schlüsselwort des Providers

Um diesen Provider aufzurufen, geben Sie in der Verbindungszeichenfolge folgendes Schlüsselwort und folgenden Wert an:

"Provider=MSPersist"

Fehler

Folgende Fehler, die von diesem Provider ausgelöst werden, können in Ihrer Anwendung ermittelt werden.

Konstante | Beschreibung
E_BADSTREAM | Die zu öffnende Datei hat kein gültiges Format (also kein ADTG- oder XML-Format).
E_CANTPERSISTROWSET | Das zu speichernde Recordset-Objekt hat Merkmale, die seine Speicherung verhindern.

Hinweise

Der Microsoft OLE DB Persistence Provider legt keine dynamischen Eigenschaften offen.

Derzeit können lediglich parametrisierte hierarchische Recordset-Objekte nicht gespeichert werden.

Weitere Informationen zu beständig speicherbaren Recordset-Objekten finden Sie unter Recordset Persistence.


Microsoft OLE DB Persistence Provider (ADO Service Provider)

Microsoft OLE DB Remoting Provider

The Microsoft OLE DB-Remoting Provider ermöglicht es einem lokalen Benutzer an einem Clientcomputer, Datenprovider an einem Remote-Computer aufzurufen. Geben Sie die Parameter des Datenproviders für den Remote-Computer so an, als wären Sie ein lokaler Benutzer an dem Rempote-Computer. Geben Sie anschließend die vom Remoting Provider verwendeten Parameter an, um auf den Remote-Computer zuzugreifen. Als Resultat können Sie auf den Remote-Computer genau so zugreifen wie ein lokaler Benutzer.

Schlüsselwort des Providers

Um den OLE DB Remoting Provider aufzurufen, geben Sie in der Verbindungszeichenfolge folgendes Schlüsselwort und folgenden Wert an: (Achten Sie auf den Leerschritt im Namen des Providers.)

"Provider=MS Remote"

Zusätzliche Schlüsselwörter

Wenn dieser Serviceprovider aufgerufen wird, sind die folgenden zusätzlichen Schlüsselwörter relevant:

Schlüsselwort | Beschreibung
Datenquelle | Gibt den Namen der Remote-Datenquelle an. Zur Verarbeitung wird es an den OLE DB Remoting Provider übergeben. Dieses Schlüsselwort entspricht der Connect-Eigenschaft eines RDS.DataControl-Objekts.

Dynamische Eigenschaften

Wenn dieser Serviceprovider aufgerufen wird, werden der Properties-Auflistung des Connection-Objekts die folgenden dynamischen Eigenschaften hinzugefügt.

Name der dynamischen Eigenschaft | Beschreibung
DFMode Gibt den DataFactory-Modus an. Eine Zeichenfolge, welche die gewünschte Version des DataFactory-Objekts auf dem Server angibt. Setzen Sie diese Eigenschaft vor dem Öffnen einer Verbindung, um eine bestimmte Version der DataFactory anzufordern. ist die angeforderte Version nicht verfügbar, dann wird versucht, die Vorgängerversion zu verwenden. Gibt es keine Vorgängerversion, dann tritt ein Fehler auf. Wenn die Zahl von DFMode kleiner als die verfügbare Version ist, tritt ein Fehler auf. Diese Eigenschaft ist erst schreibgeschützt, nachdem eine Verbindung erstellt wurde.

Dies kann eine der folgenden Konstanten sein:

  • "21" – Version 2.1 (Voreinstellung)

  • "20" – Version 2.0

  • "15" – Version 1.5
Current DFMode Gibt die aktuelle Versionsnummer der auf dem Server befindlichen DataFactory an. Überprüfen Sie diese Eigenschaft, um zu ermitteln, ob der in der DFMode-Eigenschaft angeforderten Version entsprochen wurde.

Dies kann einer der folgenden ganzzahligen Long-Werte sein:

  • 21 – Version 2.1 (Voreinstellung)

  • 20 – Version 2.0

  • 15 – Version 1.5
Handler | Gibt den Namen eines serverbasierten Anpassungsprogramms (Behandlungsroutine) an, mit dem die Funktionalität von RDSServer.DataFactory sowie alle durch die Behandlungsroutine verwendeten Parameter erweitert werden. Dabei müssen die einzelnen Elemente durch Kommas (",") voneinander getrennt werden. Ein String-Wert.
Internet Timeout | Gibt die maximale Zeit in Millisekunden an, die abgewartet wird, damit eine Anforderung zum Server und zurück übermittelt wird. (Voreinstellung ist 5 Minuten).
Remote Provider | Gibt den Namen des Datenproviders an, der auf dem Remoteserver verwendet werden soll.
Remote Server | Gibt den Namen des Servers und des Kommunikationsprotokolls an, die für diese Verbindung verwendet werden sollen. Diese Eigenschaft entspricht der Server-Eigenschaft des RDS.DataControl-Objekts.

Sie können auch überschreibbare dynamische Eigenschaften setzen, indem Sie die entsprechenden Namen als Schlüsselwörter in der Verbindungszeichenfolge angeben. Setzen Sie beispielsweise die dynamische Eigenschaft Internet Timeout auf fünf Sekunden, indem Sie Folgendes angeben:

Dim cn As New ADODB.Connection
cn.Open "Provider=MS Remote;Internet Timeout=5000"

Ebenso können Sie eine dynamische Eigenschaft setzen oder abrufen, indem Sie den entsprechenden Namen als Index für die Properties-Eigenschaft angeben. Rufen Sie beispielsweise den derzeitigen Wert der dynamischen Eigenschaft Data Provider ab und drucken Sie ihn aus. Anschließend setzen Sie einen neuen Wert, wie z. B. diesen:

Debug.Print cn.Properties("Internet Timeout")
cn.Properties("Internet Timeout") = 5000

Hinweise

In ADO 2.0 konnte der OLE DB-Remoting Provider lediglich im Parameter ActiveConnection der Open-Methode des Recordset-Objekts angegeben werden. Ab Version ADO 2.1 kann der Provider auch im Parameter ConnectionString der Open-Methode des Recordset-Objekts angegeben werden.

Eine Entsprechung der SQL-Eigenschaft des RDS.DataControl-Objekts ist hingegen nicht verfügbar. Stattdessen wird das Source-Argument der Open-Methode des Recordset-Objekts verwendet.

Beispiel

In diesem Beispiel wird eine Abfrage in der Authors-Tabelle der Pubs-Datenbank durchgeführt, und zwar auf einem Server namens YourServer. Der Name der Remote-Datenquelle und des Remote-Servers werden in der Open-Methode des Connection-Objekts gegeben, und die SQL-Abfrage wird in der Open-Methode des Recordset-Objekts angegeben. Ein Recordset-Objekt wird zurückgegeben, bearbeitet und zum Aktualisieren der Datenquelle verwendet.

Dim rs as New ADODB.Recordset
Dim cn As New ADODB.Connection
cn.Open     "Provider=MS Remote;Data Source=pubs;" & _
            "Remote Server=http://YourServer"
rs.Open "SELECT * FROM authors", cn
...                                'Bearbeiten Sie das Recordset-Objekt.
rs.UpdateBatch                    'Equivalent of RDS SubmitChanges
...


Microsoft Cursor Service für OLE DB (ADO Servicekomponente)

Microsoft Cursordienst für OLE DB

Der Microsoft Cursordienst für die OLE DB-Servicekomponente ergänzt die Cursor-Unterstützungsfunktionen der Datenprovider. Daraus resultiert, dass der Benutzer eine relativ einheitliche Funktionalität aller Datenprovider erkennt.

Der Cursordienst für OLE DB-Servicekomponenten macht dynamische Eigenschaften verfügbar und optimiert das Verhalten bestimmter Methoden. So ermöglicht beispielsweise die dynamische Eigenschaft Optimize die Erstellung von temporären Indizes zur vereinfachten Durchführung bestimmter Operationen, wie z. B. der Find-Methode.

Der Cursordienst für OLE DB ermöglicht in allen Fällen die Unterstützung von Stapelaktualisierungen. Es simuliert darüber hinaus leistungsfähigere Cursortypen, beispielsweise dynamische Cursor, wenn ein Datenprovider lediglich weniger leistungsfähige Cursor, z. B. statische Cursor, zur Verfügung stellen kann.

Schlüsselwort

Setzen Sie zum Aufrufen dieser Komponente die CursorLocation-Eigenschaft des Recordset oder des Connection-Objekts auf adUseClient.

connection.CursorLocation=adUseClient
recordset.CursorLocation=adUseClient

Dynamische Eigenschaften

Wenn der Cursordienst für OLE DB aufgerufen wird, werden der Properties-Auflistung des Recordset-Objekts die folgenden dynamischen Eigenschaften hinzugefügt.

Name der dynamischen Eigenschaft | Beschreibung
Handler (RDS) | Gibt an, ob serverbasierte Anpassungsunterstützung für RDSServer.DataFactory aktiviert ist.
Name | Gibt den Namen des Recordset an. Darauf kann innerhalb der aktuellen oder der nachfolgenden Datenstrukturierungsbefehle verwiesen werden.
Optimize | Gibt an, ob ein Index erstellt werden sollte. Wenn der Wert auf True gesetzt ist, ist die temporäre Erstellung von Indizes zur verbesserten Durchführung bestimmter Operationen möglich.
Resync Command | Gibt eine benutzerdefinierte Befehlszeichenfolge an, die bei der Resync-Methode verwendet wird, wenn die Unique Table-Eigenschaft aktiv ist.
Unique Catalog | Gibt den Namen der Datenbank an, die die Tabelle enthält, auf welche in der Unique Table-Eigenschaft verwiesen wird.
Unique Schema | Gibt den Namen des Eigentümers der Tabelle an, auf welche in der Unique Table-Eigenschaft verwiesen wird.
Unique Table | Gibt den Namen der einen Tabelle in einem Recordset an, die aus mehreren Tabellen erstellt wurde und durch Einfügungen, Aktualisierungen und Löschvorgänge verändert werden kann.
Update Resync | Gibt an, ob die Resync-Methode automatisch nach der UpdateBatch-Methode (und ihrem Verhalten) aufgerufen wird, wenn die Unique Table-Eigenschaft gilt.

Ebenso können Sie eine dynamische Eigenschaft setzen oder abrufen,indem Sie den entsprechenden Namen als Index für die Properties-Eigenschaft angeben. Rufen Sie beispielsweise den aktuellen Wert der dynamischen Eigenschaft Optimize auf, drucken Sie ihn aus und setzen Sie dann z. B. folgenden Wert:

Debug.Print rs.Properties("Optimize")
rs.Properties("Optimize") = True

Verhalten integrierter Eigenschaften

Der Cursordienst für OLE DB beeinflusst auch das Verhalten bestimmter integrierter Eigenschaften.

Name der Eigenschaft | Beschreibung
CursorType | Ergänzt die für ein Recordset verfügbaren Cursortypen.
LockType | Ergänzt die für ein Recordset verfügbaren Sperrtypen. Ermöglicht Stapelaktualisierungen.
Sort | Gibt einen oder mehrere Feldnamen an, nach denen die Sortierung im Recordset-Objekt durchgeführt wird. Außerdem wird angegeben, ob die einzelnen Felder in aufsteigender oder absteigender Reihenfolge sortiert werden.

Verhalten von Methoden

Der Cursordienst für OLE DB aktiviert oder beeinflusst das Verhalten der Append-Methode eines Field-Objekts, sowie der Methoden Open, Resync, UpdateBatch und Save eines Recordset-Objekts.


Informationen zu ADO

Informationen zum Arbeiten mit ADO und RDS finden Sie in den folgenden Abschnitten:

  • Übungen zu ADO und RDS

  • Beispielanwendungen für Remote Data Service

  • Entwicklungsanleitung zu Remote Data Service

  • ADO-Codebeispiele


Übungen zu ADO und RDS

  • Übungen zu ADO

  • Übungen zu RDS. In diesen Übungen wird erläutert, wie Sie mit dem RDS-Programmiermodell eine Datenquelle abfragen und aktualisieren können.

  • Erstellung einer einfachen RDS-Anwendung. Diese Übung beschreibt schrittweise das Erstellen einer einfachen Remote Data Service-Anwendung, die den Zugriff auf Live-Daten in einer Microsoft® Access-Datenbank ermöglicht.

  • Adressbuch. Diese Übung zeigt, wie eine einfache Remote Data Service-Anwendung erstellt wird, die die Aktualisierbarkeit und den Zugriff auf eine Microsoft® SQL Server™-Datenbank ermöglicht.


Übungen zu ADO

In diesen Übungen wird erläutert, wie das ADO-Programmiermodell zum Abfragen und Aktualisieren einer Datenquelle verwendet wird. Zuerst werden die Schritte beschrieben, die zur Erfüllung dieser Aufgabe erforderlich sind. Dann werden die Übungen jeweils für Microsoft® Visual Basic®; Microsoft® Visual C++® mit VC++-Erweiterungen, Microsoft® Visual Basic®, Scripting Edition, und Microsoft® Visual J++™ mit ADO für Windows Foundation Classes (ADO/WFC) wiederholt.

Aus zwei Gründen werden die Übungen mit Code in verschiedenen Sprachen vorgestellt:

  • Bei der Dokumentation von ADO wird davon ausgegangen, dass in Visual Basic programmiert wird. Dadurch ist diese Dokumentation beim Programmieren in Visual Basic sehr nützlich, sie ist jedoch für das Programmieren in anderen Sprachen weniger hilfreich.

  • Wenn Sie sich bei einem bestimmten ADO-Feature unsicher sind und sich ein wenig in einer anderen Sprache auskennen, können Sie Ihre Fragen unter Umständen beantworten, indem Sie nachsehen, wie dieses Feature in einer anderen Sprache formuliert ist.

Präsentation der Übungen

Diese Übungen basieren auf dem ADO-Programmiermodell. Sie beschreiben jeden Schritt des Programmiermodells einzeln. Darüber hinaus wird jeder Schritt durch ein Codefragment in Visual Basic veranschaulicht. Am Schluss werden die Codefragmente dann zu einem Visual Basic-Beispiel neu formuliert und integriert.

Das Codebeispiel wird in anderen Sprachen wiederholt, ohne dass dies jedoch näher erläutert wird. Jeder Schritt in einer bestimmten Pogrammiersprachenübung ist mit dem ihm entsprechenden Schritt in der Übung, die das Programmiermodell erläutert, gekennzeichnet. Die Nummer des jeweiligen Schrittes dient als Verweis auf die zugehörige Darstellung in den erläuternden Übungen.

Da diese Übungen aus mehreren kleinen Codefragmenten bestehen, können Sie den Code nicht wie geschrieben ausführen.

Das ADO-Programmiermodell ist im Folgenden dargestellt. Verwenden Sie es als Leitfaden, der Sie durch die Übungen führt.

Das ADO-Programmiermodell mit Objekten

  • Stellen Sie eine Verbindung zu einer Datenquelle her (Connection). Wahlweise können Sie auch eine Transaktion beginnen.

  • Erstellen Sie optional ein Objekt, das einen SQL-Befehl darstellt (Command).

  • Geben Sie im SQL-Befehl optional Spalten, Tabellen und Werte als variable Parameter an (Parameter).

  • Führen Sie den Befehl aus (Command, Connection oder Recordset).

  • Gibt der Befehl Zeilen zurück, speichern Sie die Zeilen in einem Speicherobjekt (Recordset-Objekt).

  • Erstellen Sie optional eine Ansicht des Speicherobjekts, so dass Sie die Daten sortieren, filtern und sich durch sie bewegen können (Recordset-Objekt).

  • Bearbeiten Sie die Daten, indem Sie Zeilen und Spalten hinzufügen, löschen oder verändern (Recordset-Objekt).

  • Aktualisieren Sie die Datenquelle ggf. mit den Änderungen aus dem Speicherobjekt (Recordset-Objekt).

  • Wenn Sie eine Transaktion verwendet haben, akzeptieren Sie die Änderungen, die während der Transaktion gemacht wurden, oder lehnen Sie sie ab. Beenden Sie die Transaktion (Connection).

Weiter Schritt 1


Schritt 1: Öffnen einer Verbindung (Übungen zu ADO)

Step 1: Öffnen einer Verbindung (Übungen zu ADO)

Der hier erläuterte Schritt ist grafisch hervorgehoben...

  • Stellen Sie eine Verbindung zu einer Datenquelle her.

  • Erstellen Sie optional ein Objekt, das einen SQL-Abfragebefehl darstellt.

  • Geben Sie im SQL-Befehl optional Werte als variable Parameter an.

  • Führen Sie den Befehl aus. Gibt der Befehl Zeilen zurück, speichern Sie die Zeilen in einem Speicherobjekt.

  • Bewegen Sie sich optional durch die Daten, und untersuchen, verändern und bearbeiten Sie sie.

  • Aktualisieren Sie ggf. die Datenquelle mit den Änderungen aus dem Speicherobjekt. Betten Sie die Aktualisierung optional in eine Transaktion ein.

  • Wenn Sie eine Transaktion verwendet haben, akzeptieren Sie die während der Transaktion vorgenommenen Änderungen, oder lehnen Sie sie ab. Beenden Sie die Transaktion.

Erläuterung

Sie benötigen ein Mittel, um die für den Austausch von Daten erforderlichen Bedingungen zu erfüllen, d. h. eine Verbindung. Die Datenquelle, zu der Sie die Verbindung herstellen, ist in einer Verbindungszeichenfolge angegeben, wobei die Parameter in einer Verbindungszeichenfolge für jeden Provider und jede Datenquelle unterschiedlich sein können.

Der gebräuchlichste Weg, über den ADO eine Verbindung aufbaut, ist die Connection.Open-Methode. Alternativ dazu können Sie auch das Schnellverfahren, Recordset.Open, aufrufen, um sowohl eine Verbindung herzustellen als auch einen Befehl über diese Verbindung in einer einzigen Operation auszugeben. Es folgt die Syntax für beide Methoden in Visual Basic:

connection.Open ConnectionString, UserID, Password, OpenOptions
recordset.Open Source, ActiveConnection, CursorType, LockType, Options

Es ist hilfreich, diese beiden Methoden miteinander zu vergleichen, um einige nützliche Merkmale der ADO-Methodenoperanden allgemein hervorzuheben.

ADO stellt mehrere bequeme Möglichkeiten zum Angeben eines Operanden zur Verfügung. Recordset.Open verwendet beispielsweise einen ActiveConnection-Operanden, der die Literalzeichenfolge sein kann, eine Variable, die diese Zeichenfolge darstellt, oder ein Connection-Objekt, das eine offene Verbindung darstellt.

Die meisten Methoden eines Objekts verfügen über Eigenschaften, die ein Argument liefern können, wenn ein Methodenoperand übergangen wird. Im Beispiel von Connection.Open könnten Sie den expliziten ConnectionString-Operanden übergehen und die Informationen implizit verfügbar machen, indem Sie die ConnectionString-Eigenschaft auf "DSN=pubs;uid=sa;pwd=;database=pubs" festlegen.

Im Gegensatz dazu können die uid- und pwd-Schlüsselwortoperanden in einer Verbindungszeichenfolge die UserID- und Password-Parameter des Connection-Objekts festlegen.

In dieser Übung wird die Connection.Open-Methode mit einer expliziten Verbindungszeichenfolge aufgerufen. Als Datenquelle dient die ODBC-Datenquelle (Open Database Connectivity) pubs, die als Testdatenbank mit Microsoft SQL Server geliefert wird. (Die tatsächliche Position der Datenquelle, also das lokale Laufwerk oder der Remoteserver, wird angegeben, wenn Sie den Datenquellennamen (Data Source Name, DSN) definieren.)

connection.Open "DSN=pubs;uid=sa;pwd=;database=pubs"

Weiter Schritt 2


Schritt 2: Erstellen eines Befehls (Übungen zu ADO)

Der hier erläuterte Schritt ist grafisch hervorgehoben...

  • Stellen Sie eine Verbindung zu einer Datenquelle her.

  • Erstellen Sie optional ein Objekt, das einen SQL-Abfragebefehl darstellt.

  • Geben Sie im SQL-Befehl optional Werte als variable Parameter an.

  • Führen Sie den Befehl aus. Gibt der Befehl Zeilen zurück, speichern Sie die Zeilen in einem Speicherobjekt.

  • Bewegen Sie sich optional durch die Daten, und untersuchen, verändern und bearbeiten Sie sie.

  • Aktualisieren Sie ggf. die Datenquelle mit den Änderungen aus dem Speicherobjekt. Betten Sie die Aktualisierung optional in eine Transaktion ein.

  • Wenn Sie eine Transaktion verwendet haben, akzeptieren Sie die Änderungen, die während der Transaktion gemacht wurden, oder lehnen Sie sie ab. Beenden Sie die Transaktion.

Erläuterung

Ein Abfragebefehl bewirkt, dass die Datenquelle ein Recordset-Objekt zurückgibt, das Zeilen mit den gewünschten Informationen enthält. Befehle sind in der Regel in SQL geschrieben.

  1. Operanden, z. B. eine Befehlszeichenfolge, können - wie bereits erwähnt - folgendermaßen dargestellt werden:
    • Eine Literalzeichenfolge oder eine Variable, die die Zeichenfolge darstellt. In dieser Übung könnten alle Informationen in der Authors-Tabelle der pubs-Datenbank mit der Befehlszeichenfolge "SELECT * from authors" abgefragt werden.

    • Ein Objekt, das die Befehlszeichenfolge darstellt. In diesem Fall ist der Wert einer CommandText-Eigenschaft des Command-Objekts auf die Befehlszeichenfolge festgelegt.
      Command cmd = New ADODB.Command;
cmd.CommandText = "SELECT * from authors"
  2. Geben Sie eine parametrisierte Befehlszeichenfolge mit dem Platzhalter '?' an.

    Der Inhalt einer SQL-Zeichenfolge kann nicht geändert werden. Sie können jedoch einen parametrisierten Befehl erstellen, in dem Teilzeichenfolgen mit dem Platzhalter '?' durch Parameter ersetzt werden können, wenn ein Befehl ausgeführt wird.

    Sie können die Leistung der parametrisierten Befehle mit der Prepared-Eigenschaft optimieren. Sie können sie wiederholt ausgeben, wobei jedes Mal nur die Parameter verändert werden.

    Die folgende Befehlszeichenfolge gibt z. B. eine Abfrage nach allen Autoren aus, deren Nachname "Ringer" lautet:

    Command cmd = New ADODB.Command
cmd.CommandText = "SELECT * from authors WHERE au_lname = ?"
  3. Geben Sie ein Parameter-Objekt an. Fügen Sie es der Parameters-Auflistung hinzu.

    Jeder Platzhalter '?' wird durch den Wert eines entsprechenden Parameter-Objekts in der Parameters-Auflistung des Command-Objekts ersetzt. Erstellen Sie ein Parameter-Objekt mit Ringer als Wert, und fügen Sie es dann der Parameters-Auflistung hinzu:

    Parameter prm = New ADODB.Parameter
prm.Name = "au_lname"
prm.Type = adVarChar
prm.Direction = adInput
prm.Size = 40
prm.Value = "Ringer"
cmd.Parameters.Append prm
  4. Geben Sie ein Parameter-Objekt mit der CreateParameter-Methode an, und fügen Sie es hinzu.

    ADO bietet nun eine bequeme Alternative für das Erstellen eines Parameter-Objekts und das Hinzufügen dieses Objekts zur Parameters-Auflistung in einem einzelnen Schritt.

    cmd.Parameters.Append cmd.CreateParameter _
                "au_lname", adVarChar, adInput, 40, "Ringer"

    In dieser Übung wird jedoch kein parametrisierter Befehl verwendet, da Sie die Command.Execute-Methode verwenden müssen, um die Parameter für die '?'-Platzhalter zu ersetzen. Mit dieser Methode könnten jedoch weder ein Recordset-Cursortyp noch Sperroptionen angegeben werden. Verwenden Sie aus diesem Grund folgenden Code:

    Command cmd = New ADODB.Command;
cmd.CommandText = "SELECT * from authors"

Zu Ihrer Information sehen Sie hier den Aufbau der Authors-Tabelle:

Spaltenname | Datentyp(Länge) | Nullfähig?
au_id | ID (11) | Nein
au_lname | varchar(40) | Nein
au_fname | varchar(20) | Nein
Phone | char(12) | Nein
Address | varchar(40) | Ja
Stadt | varchar(20) | Ja
Bundesstaat | char(2) | Ja
Zip | char(5) | Ja
Contract | bit | Nein

Weiter Schritt 3


Schritt 3: Ausführen des Befehls (Übungen zu ADO)

Der hier erläuterte Schritt ist grafisch hervorgehoben...

  • Stellen Sie eine Verbindung zu einer Datenquelle her.

  • Erstellen Sie optional ein Objekt, das einen SQL-Abfragebefehl darstellt.

  • Geben Sie im SQL-Befehl optional Werte als variable Parameter an.

  • Führen Sie den Befehl aus. Gibt der Befehl Zeilen zurück, speichern Sie die Zeilen in einem Speicherobjekt.

  • Bewegen Sie sich optional durch die Daten, und untersuchen, verändern und bearbeiten Sie sie.

  • Aktualisieren Sie ggf. die Datenquelle mit den Änderungen aus dem Speicherobjekt. Betten Sie die Aktualisierung optional in eine Transaktion ein.

  • Wenn Sie eine Transaktion verwendet haben, akzeptieren Sie die Änderungen, die während der Transaktion gemacht wurden, oder lehnen Sie sie ab. Beenden Sie die Transaktion.

Erläuterung

Die drei Methoden, die ein Recordset-Objekt zurückgeben, sind Connection.Execute, Command.Execute und Recordset.Open. Es folgt ihre Syntax in Visual Basic:

connection.Execute(CommandText, RecordsAffected, Options)
command.Execute(RecordsAffected, Parameters, Options)
recordset.Open Source, ActiveConnection, CursorType, LockType, Options

Diese Methoden sind so optimiert, dass sie die jeweiligen Stärken ihrer Objekte nutzen.

Vor der Ausführung eines Befehls müssen Sie eine Verbindung öffnen. Jede Methode, die einen Befehl ausgibt, stellt die Verbindung unterschiedlich dar:

  • Die Connection.Execute-Methode verwendet die Verbindung, die durch das Connection-Objekt selbst verkörpert wird.

  • Die Command.Execute-Methode verwendet das Connection-Objekt, das in der ActiveConnection-Eigenschaft festgelegt ist.

  • Die Recordset.Open-Methode gibt entweder eine Verbindungszeichenfolge oder einen Connection-Objektoperanden an, oder sie verwendet das Connection-Objekt, das in der ActiveConnection-Eigenschaft festgelegt ist.

Ein weiterer Unterschied besteht in der Art, wie der Befehl in den drei Methoden angegeben ist:

  • In der Connection.Execute-Methode ist der Befehl als eine Zeichenfolge angegeben.

  • In der Command.Execute-Methode ist der Befehl nicht sichtbar, sondern in der Command.CommandText-Eigenschaft angegeben. Darüber hinaus kann der Befehl Parametersymbole ('?') enthalten, die durch den entsprechenden Parameter im VARIANT-Arrayargument Parameters ersetzt werden.

  • In der Recordset.Open-Methode ist der Befehl das Source-Argument, das eine Zeichenfolge oder ein Command-Objekt sein kann.

Bei jeder Methode wird ein Kompromiss zwischen Funktionalität und Leistung geschlossen:

  • Die Execute-Methoden sind zur Ausführung von Befehlen gedacht, die keine Daten zurückgeben – sie sind jedoch nicht darauf beschränkt.

  • Beide Execute-Methoden geben ausschließlich Recordset-Objekte mit schnellen Schreibschutzcursor vom Typ Vorwärts zurück.

  • Mit der Command.Execute-Methode können Sie parametrisierte Befehle verwenden, die effizient wiederverwendet werden können.

  • Andererseits können Sie mit der Open-Methode Folgendes festlegen: den CursorType, der die Strategie und das Objekt für den Zugriff auf die Daten bestimmt, sowie den LockType, der den Grad der Isolierung von anderen Benutzern bestimmt und andererseits festlegt, ob der Cursor Aktualisierungen im Direktmodus (sofort) oder im Stapelmodus unterstützt.

  • Sie sollten sich diese Optionen sehr genau ansehen, da sie einen großen Teil der Funktionen eines Recordset-Objekts verkörpern.

In diesen Übungen wird ein dynamischer Cursor verwendet, um alle Änderungen am Recordset zu verarbeiten. Verwenden Sie aus diesem Grund Folgendes:

Recordset rs = New ADODB.Recordset
rs.Open cmd, conn, adOpenDymanic, adLockBatchOptimistic

Weiter Schritt 4


Schritt 4: Verändern der Daten (Übungen zu ADO)

Der hier erläuterte Schritt ist grafisch hervorgehoben...

  • Stellen Sie eine Verbindung zu einer Datenquelle her.

  • Erstellen Sie optional ein Objekt, das einen SQL-Abfragebefehl darstellt.

  • Geben Sie im SQL-Befehl optional Werte als variable Parameter an.

  • Führen Sie den Befehl aus. Gibt der Befehl Zeilen zurück, speichern Sie die Zeilen in einem Speicherobjekt.

  • Bewegen Sie sich optional durch die Daten, und untersuchen, verändern und bearbeiten Sie sie.

  • Aktualisieren Sie ggf. die Datenquelle mit den Änderungen aus dem Speicherobjekt. Betten Sie die Aktualisierung optional in eine Transaktion ein.

  • Wenn Sie eine Transaktion verwendet haben, akzeptieren Sie die Änderungen, die während der Transaktion gemacht wurden, oder lehnen Sie sie ab. Beenden Sie die Transaktion.

Erläuterung

Der größte Teil der Methoden und Eigenschaften der Recordset-Objekte dient dazu, die Datenzeilen eines Recordsets zu untersuchen, sich durch sie zu bewegen und sie zu verändern.

Stellen Sie sich ein Recordset als ein Array von Zeilen vor. Die Zeile, die Sie zu jeder beliebigen Zeit untersuchen und verändern können, ist die aktuelle Zeile, und ihre Position im Recordset ist die aktuelle Zeilenposition. Jedes Mal, wenn Sie zu einer anderen Zeile wechseln, wird diese Zeile zur neuen aktuellen Zeile.

Verschiedene Methoden bewegen sich explizit durch das Recordset (die Move-Methoden). Einige Methoden (z. B. die Find-Methode) weisen diese Funktion als Nebeneffekt ihrer Operation auf. Darüber hinaus können Sie auch durch Festlegen bestimmter Eigenschaften (z. B. der Bookmark-Eigenschaft) die Zeilenposition verändern.

Die Filter-Eigenschaft kann zum Steuern von Zeilen verwendet werden, auf die Sie zugreifen können (d. h., die Zeilen sind für Sie "sichtbar"). Die Sort-Eigenschaft steuert die Reihenfolge, in der Sie sich durch die Zeilen des Recordset bewegen.

Ein Recordset enthält eine Fields-Auflistung, die aus der Gruppe von Field-Objekten besteht, die jedes Feld oder jede Spalte in einer Zeile darstellen. Weisen Sie die Daten für ein Feld in der Value-Eigenschaft des Field-Objekts zu, oder rufen Sie diese ab. Sie können optional auch auf Felddaten in der Menge zugreifen (mit den Methoden GetRows und Update).

In diesen Übungen werden Sie folgende Aktionen durchführen:

  • Stellen Sie sich vor, die Telefonnummern im Vorwahlbereich "415" mit Verteilern, die mit "5" beginnen, werden in den fiktiven Vorwahlbereich "777" umgeändert.

  • Legen Sie die Optimize-Eigenschaft in der Properties-Auflistung des Field-Objekts au_lname fest, um die Leistung beim Sortieren und Filtern zu verbessern.

  • Sortieren Sie das Recordset-Objekt nach den Nachnamen der Verfasser.

  • Filtern Sie das Recordset-Objekt, so dass nur auf die Zeilen zugegriffen werden kann (d. h. nur die "sichtbar" sind), in denen der Vorwahlbereich des Autors "415" ist und der Verteiler mit "5" beginnt.

Verwenden Sie die Move-Methoden, um vom Anfang des sortierten, gefilterten Recordset-Objekts zu seinem Ende zu gehen. Stoppen Sie, wenn die EOF-Eigenschaft des Recordset-Objekts anzeigt, dass Sie die letzte Zeile erreicht haben. Während Sie sich durch das Recordset-Objekt bewegen, zeigen Sie Vor- und Nachnamen sowie die ursprünglichen Telefonnummern der Autoren an, ändern Sie dann den Vorwahlbereich im phone-Feld zu "777". (Die Telefonnummern im phone-Feld haben die Form "aaa xxx-yyyy", wobei aaa der Vorwahlbereich ist und xxx der Verteiler.)

rs("au_lname").Properties("Optimize") = TRUE
rs.Sort = "au_lname ASC"
rs.Filter = "phone LIKE '415 5*'"
rs.MoveFirst
Do While Not rs.EOF
    Debug.Print "Name: " & rs("au_fname") & " " rs("au_lname") & _
        "Phone: " rs("phone") & vbCr
    rs("phone") = "777" & Mid(rs("phone"), 5, 11)
    rs.MoveNext
Loop

Weiter Schritt 5


Schritt 5: Aktualisieren der Daten (Übungen zu ADO)

Der hier erläuterte Schritt ist grafisch hervorgehoben...

  • Stellen Sie eine Verbindung zu einer Datenquelle her.

  • Erstellen Sie optional ein Objekt, das einen SQL-Abfragebefehl darstellt.

  • Geben Sie im SQL-Befehl optional Werte als variable Parameter an.

  • Ausführen des Befehls. Gibt der Befehl Zeilen zurück, speichern Sie die Zeilen in einem Speicherobjekt.

  • Bewegen Sie sich optional durch die Daten, und untersuchen, verändern und bearbeiten Sie sie.

  • Aktualisieren Sie ggf. die Datenquelle mit den Änderungen aus dem Speicherobjekt. Betten Sie die Aktualisierung optional in eine Transaktion ein.

  • Wenn Sie eine Transaktion verwendet haben, akzeptieren Sie die Änderungen, die während der Transaktion gemacht wurden, oder lehnen Sie sie ab. Beenden Sie die Transaktion.

Erläuterung

Sie haben gerade die Daten in verschiedenen Zeilen des Recordset verändert. ADO unterstützt zwei grundsätzliche Konzepte zum Hinzufügen, Löschen und Verändern von Datenzeilen.

Das erste Konzept besagt, dass Änderungen nicht direkt am Recordset-Objekt vorgenommen werden, sondern in einem internen Kopierpuffer. Wenn Sie beschließen, die Änderungen zu verwerfen, werden die Änderungen im Kopierpuffer verworfen. Wenn Sie beschließen, die Änderungen zu übernehmen, werden die Änderungen vom Kopierpuffer auf das Recordset übertragen.

Das zweite Konzept besagt, dass Änderungen entweder an die Datenquelle weitergegeben werden, sobald Sie die Arbeit an einer Zeile für abgeschlossen erklären (d. h. im Direktmodus), oder dass alle Änderungen an einer Gruppe von Zeilen gesammelt werden, bis Sie die Arbeit an der gesamten Gruppe für abgeschlossen erklären (d. h. im Stapelmodus). Diese Modi werden durch die Eigenschaften CursorLocation und LockType gesteuert.

Im Direktmodus werden durch jeden Aufruf der Update-Methode die Änderungen an die Datenquelle übergeben. Im Stapelmodus werden durch jeden Aufruf von Update oder durch jede Veränderung der aktuellen Zeilenposition die Änderungen am Recordset-Objekt gespeichert, aber lediglich bei Verwendung der UpdateBatch-Methode werden die Änderungen auch an die Datenquelle übergeben. Sie haben das Recordset im Stapelmodus geöffnet, also wird auch die Aktualisierung im Stapelmodus vorgenommen.

Anmerkung Es gibt eine bequeme Möglichkeit der Aktualisierung, bei der Sie eine Änderung in einem Feld oder ein Array von Änderungen in einem Array mit Feldwerten durchführen und dann Update ausführen, und das alles in einem einzigen Schritt.

Optional können Sie die Aktualisierung auch in einer Transaktion durchführen. In der Praxis würden Sie eine Transaktion verwenden, um sicherzustellen, dass verschiedene miteinander verbundene Operationen, die voneinander abhängig sind, entweder alle erfolgreich verlaufen oder aber alle abgebrochen werden. In diesem Fall ist eine Transaktion nicht wirklich erforderlich.

Transaktionen belegen in der Regel begrenzte Ressourcen in der Datenquelle über einen langen Zeitraum. Aus diesem Grund wird empfohlen, dass eine Transaktion über einen möglichst kurzen Zeitraum besteht. (Daher wurde am Anfang dieser Übung keine Transaktion gestartet, als Sie die Verbindung aufgebaut haben.)

Fassen Sie für diese Übung Ihre Stapelaktualisierung in einer Transaktion zusammen:

conn.BeginTrans
rs.UpdateBatch
...

Weiter Schritt 6


Schritt 6: Abschließen der Aktualisierung (Übungen zu ADO)

Der hier erläuterte Schritt ist grafisch hervorgehoben...

  • Stellen Sie eine Verbindung zu einer Datenquelle her.

  • Erstellen Sie optional ein Objekt, das einen SQL-Abfragebefehl darstellt.

  • Geben Sie im SQL-Befehl optional Werte als variable Parameter an.

  • Führen Sie den Befehl aus. Gibt der Befehl Zeilen zurück, speichern Sie die Zeilen in einem Speicherobjekt.

  • Bewegen Sie sich optional durch die Daten, und untersuchen, verändern und bearbeiten Sie sie.

  • Aktualisieren Sie ggf. die Datenquelle mit den Änderungen aus dem Speicherobjekt. Betten Sie die Aktualisierung optional in eine Transaktion ein.

  • Wenn Sie eine Transaktion verwendet haben, akzeptieren Sie die Änderungen, die während der Transaktion gemacht wurden, oder lehnen Sie sie ab. Beenden Sie die Transaktion.

Erläuterung

Stellen Sie sich vor, die Stapelaktualisierung wurde mit Fehlern beendet. Die Behebung dieser Fehler hängt von der Ursache und Bedeutung des Fehlers ab sowie von der Logik der Anwendung. Wenn Sie jedoch die Datenbank mit anderen Benutzern gemeinsam nutzen, liegt ein typischer Fehler darin, dass ein anderer Benutzer ein Feld vor Ihnen verändert hat. Diese Art von Fehler wird Konflikt genannt. ADO erkennt diese Situation und meldet einen Fehler.

In der Übung besteht dieser Schritt aus zwei Teilen: Gibt es keine Aktualisierungsfehler, führen Sie die Transaktion aus (CommitTrans). Dadurch wird die Aktualisierung abgeschlossen.

Sind Fehler aufgetreten, werden sie in einer Fehlerbehandlungsroutine aufgefangen. Filtern Sie das Recordset-Objekt mit der adFilterConflictingRecords-Konstante, so dass nur die Zeilen mit den Konflikten angezeigt werden. Die Strategie für die Fehlerbehebung liegt einfach darin, den Vor- und Nachnamen des Autors (au_fname und au_lname ) zu drucken. Setzen Sie anschließend die Transaktion zurück, so dass die schon erfolgten Aktualisierungen verworfen werden (RollBack). Dadurch wird die Aktualisierung abgeschlossen.

...
conn.CommitTrans
...
On Error
rs.Filter = adFilterConflictingRecords
rs.MoveFirst
Do While Not rs.EOF
    Debug.Print "Konflikt: Name: " & rs("au_fname") " " & rs("au_lname")
    rs.MoveNext
Loop
conn.Rollback
Resume Next
...

Hier endet die Übung.


Übungen zu ADO (VB)

Public Sub main()

Dim conn As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim rs As New ADODB.Recordset
' Schritt 1
conn.Open "DSN=pubs;uid=sa;pwd=;database=pubs"
' Schritt 2
Set cmd.ActiveConnection = conn
cmd.CommandText = "SELECT * from authors"
' Schritt 3
rs.CursorLocation = adUseClient
rs.Open cmd, , adOpenStatic, adLockBatchOptimistic
' Schritt 4
rs("au_lname").Properties("Optimize") = True
rs.Sort = "au_lname"
rs.Filter = "phone LIKE '415 5*'"
rs.MoveFirst
Do While Not rs.EOF
    Debug.Print "Name: " & rs("au_fname") & " "; rs("au_lname") & _
        "Phone: "; rs("phone") & vbCr
    rs("phone") = "777" & Mid(rs("phone"), 5, 11)
    rs.MoveNext
Loop

' Schritt 5
conn.BeginTrans

'Schritt 6, Teil A
On Error GoTo ConflictHandler
rs.UpdateBatch
On Error GoTo 0

conn.CommitTrans

Exit Sub

'Schritt 6, Teil B
ConflictHandler:

rs.Filter = adFilterConflictingRecords
rs.MoveFirst
Do While Not rs.EOF
    Debug.Print "Konflikt: Name: " & rs("au_fname"); " " & rs("au_lname")
    rs.MoveNext
Loop
conn.Rollback
Resume Next

End Sub

Hier endet die Visual Basic-Übung.


Übungen zu ADO (VC++)

In dieser Übung werden die neuen Microsoft Visual C++-Erweiterungen erläutert. Durch die VC++-Erweiterungen kann auf die Verwendung der unhandlichen VARIANT-Datentypen verzichtet werden.

In dieser Übung wird außerdem auch die #import-Anweisung verwendet, mit der die ADO-Klassenbibliothek in eine Headerdatei konvertiert wird. Durch die Headerdatei erhalten einige ADO-Funktionen ähnliche Verwendungsmöglichkeiten und ein ähnliches Erscheinungsbild wie in Microsoft Visual Basic.

Note Die zur Verfügung stehenden Bindungsmakros, die in diesem Beispiel verwendet werden, haben sich seit ihrer erstmaligen Beschreibung in einer Dokumentation weiter entwickelt. Weitere Informationen zu den aktuellen Makrodefinitionen finden Sie in der Headerdatei icrsint.h.

#define INITGUID
#import "c:\Programme\Gemeinsame Dateien\System\ADO\msado15.dll"
    no_namespace rename("EOF", "EndOfFile")
#include <stdio.h>
#include <icrsint.h>

void dump_com_error(_com_error &e)
    {
    printf("Error\n");
    printf("\a\tCode = %08lx\n", e.Error());
    printf("\a\tCode meaning = %s", e.ErrorMessage());
    _bstr_t bstrSource(e.Source());
    _bstr_t bstrDescription(e.Description());
    printf("\a\tSource = %s\n", (LPCSTR) bstrSource);
    printf("\a\tDescription = %s\n", (LPCSTR) bstrDescription);
    }

class CCustomRs :
    public CADORecordBinding
{
BEGIN_ADO_BINDING(CCustomRs)
    ADO_VARIABLE_LENGTH_ENTRY2(1, adVarChar, m_szau_lname,
            sizeof(m_szau_lname), lau_lnameStatus, false)
    ADO_VARIABLE_LENGTH_ENTRY2(2, adVarChar, m_szau_fname,
            sizeof(m_szau_fname), lau_fnameStatus, false)
    ADO_VARIABLE_LENGTH_ENTRY2(3, adVarChar, m_szphone,
            sizeof(m_szphone),    lphoneStatus,    true)
END_ADO_BINDING()

public:
    CHAR    m_szau_lname[41];
    ULONG    lau_lnameStatus;
    CHAR    m_szau_fname[41];
    ULONG    lau_fnameStatus;
    CHAR    m_szphone[12];
    ULONG    lphoneStatus;
};

VOID    main()
    {
    HRESULT                hr;
    IADORecordBinding    *picRs = NULL;

    ::CoInitialize(NULL);

    try
        {
        _ConnectionPtr pConn("ADODB.Connection.1.5");
        _RecordsetPtr pRs("ADODB.Recordset.1.5");
        CCustomRs rs;

// Schritt 1: Öffnen einer Verbindung

        pConn->Open("dsn=pubs;", "sa", "", adConnectUnspecified);

// Schritt 2: Erstellen eines Befehls
// Schritt 3: Ausführen des Befehls

        pRs->Open("select * from authors",
            _variant_t(pConn),
            adOpenDynamic, adLockOptimistic, adCmdText);

        if (FAILED(hr = pRs->QueryInterface(__uuidof(IADORecordBinding),
                (LPVOID*)&picRs)))
            _com_issue_error(hr);

        if (FAILED(hr = picRs->BindToRecordset(&rs)))
            _com_issue_error(hr);

// Schritt 4: Verändern der Daten

        pRs->Fields->GetItem("au_lname")->Properties->GetItem("Optimize")->Value = true;
        pRs->Sort = "au_lname ASC";
        pRs->Filter = "phone LIKE '415 5*";

        pRs->MoveFirst();
        while (VARIANT_FALSE == pRs->EndOfFile)
            {
            printf("\a\tName: %s\t %s\tPhone: %s\n",
                (rs.lau_fnameStatus == adFldOK ? rs.m_szau_fname : ""),
                (rs.lau_lnameStatus == adFldOK ? rs.m_szau_lname : ""),
                (rs.lphoneStatus == adFldOK ? rs.m_szphone   : ""));

            if (rs.lphoneStatus == adFldOK)
                memcpy(rs.m_szphone, "777", 3);

            if (FAILED(hr = picRs->Update(&rs)))
                _com_issue_error(hr);

        // Ändert die aktuelle Zeile im Recordset.
        // Recordset-Daten für die neue aktuelle Zeile werden automatisch
        // extrahiert und in den CCustomRs C++-Instanzvariablen platziert.

            pRs->MoveNext();
            }
        pRs->Filter = (long) adFilterNone;

// Schritt 5: Aktualisieren der Daten

        pConn->BeginTrans();
        try
            {
            pRs->UpdateBatch(adAffectAll);

            //Schritt 6, Teil A: Abschließen der Aktualisierung
            pConn->CommitTrans();
            }

        catch (_com_error)
            {
            //Schritt 6, Teil B: Abschließen der Aktualisierung
            pRs->Filter = (long) adFilterConflictingRecords;
            pRs->MoveFirst();
            while (VARIANT_FALSE == pRs->EndOfFile)
                {
                printf("\a\tConflict: Name = %s\t %s\n",
                    (rs.lau_fnameStatus == adFldOK ? rs.m_szau_fname : ""),
                    (rs.lau_lnameStatus == adFldOK ? rs.m_szau_lname : ""));
                pRs->MoveNext();
                }
            pConn->RollbackTrans();
            }
        }

    catch (_com_error &e)
        {
        dump_com_error(e);
        }

    CoUninitialize();
    }

Hier endet die VC++-Übung.


Übungen zu ADO (VJ++)

In dieser Übung wird das neue ADO/WFC erläutert.

ASCimport com.ms.wfc.data.*;

/**
* ADOTutorial:
* Zweck: Zeigt die Verwendung von Ado in Java.
*        Öffnet ein Recordset-Objekt durch ein Command-Objekt
*        und zeigt die Aktualisierung in einer Transaktion.
*/
public class ADOTutorial
{
    public static String strConn = "Driver={SQL Server};SERVER=JDO_ODIN;DATABASE=JetQA;UID=testmod;PWD=testmod;";//ODBC-Verbindungszeichenfolge

    public static void main(String args[] )
    {
        try
        {
            Connection conn = new Connection();
            Command cmd = new Command();
            Recordset rs = new Recordset();

            int actErrorNum = 0;
            Field fld;
            AdoProperties fldProps;

// Schritt 1: Öffnet die Verbindung
            conn.open(strConn);

// Schritt 2: Erstellen eines Befehls
            cmd.setActiveConnection(conn);
            cmd.setCommandText("SELECT * from authors");

// Schritt 3: Öffnen des Recordset-Objekts mit der Quelle als Command-Objekt
            rs.setCursorLocation(AdoEnums.CursorLocation.CLIENT);
            rs.setCursorType(AdoEnums.CursorType.DYNAMIC);
            rs.setLockType(AdoEnums.LockType.BATCHOPTIMISTIC);
            rs.open (cmd);

// Schritt 4: Verändern der Daten
            fldProps  = rs.getField("au_lname").getProperties();

                             fldProps.getItem("Optimize").setBoolean(true);

            rs.setSort("au_lname");

            rs.setFilter("phone like '415*'");

            rs.moveFirst();

            while ( !rs.getEOF())

            {
                StringBuffer strBuf = new StringBuffer();
                System.out.println( " Name: " + rs.getField("au_fname").getString() +
                    "  " + rs.getField("au_lname").getString() +
                    "   Phone : " + rs.getField("phone").getString() );

                //Vorwahl 415 in 779 für das Feld ändern
                fld =  rs.getField("phone");

                strBuf.append( fld.getString());

                strBuf.setCharAt(0, '7');
                strBuf.setCharAt(1, '7');
                strBuf.setCharAt(2,  '9');

                //Feld auf neuen Wert festlegen
                fld.setString(strBuf.toString());

                rs.moveNext();

            }

// Schritt 5: Aktualisieren der festgelegten Feldwerte
            conn.beginTrans();

                 //Schritt 6, Teil A: Abschließen der Aktualisierung
            try
            {

                rs.updateBatch();
                conn.commitTrans();

            }
// Schritt 6: Abschließen der Aktualisierung

            catch(com.ms.wfc.data.AdoException ex)
            {

              //Fehler. Zurücksetzen der
             //Transaktion erforderlich
                rs.setFilter(new Integer                                (AdoEnums.FilterGroup.CONFLICTINGRECORDS));
                rs.moveFirst();

                while(!rs.getEOF())
                {
                    //In Konflikt stehende Datensätze drucken
                    System.out.println(" Conflict : Name: "+ rs.getField("au_fname").getString() + " " +
                        rs.getField("au_lname").getString() );

                    rs.moveNext();
                }
                conn.rollbackTrans();
            }
               System.out.println("type any character to continue...");
           System.in.read();

        }
        catch(Exception ex)
        {
            ex.printStackTrace();
        }
    }
}

Hier endet die VJ++-Übung.


Übungen zu RDS

In diesen Übungen wird erläutert, wie Sie mit dem RDS-Programmiermodell eine Datenquelle abfragen und aktualisieren können. Zuerst werden die Schritte beschrieben, die zur Erfüllung dieser Aufgabe erforderlich sind. Danach werden die Übungen jeweils für Microsoft® Visual Basic®, Scripting Edition und Microsoft® Visual J++™ (mit ADO für Windows Foundation Classes, ADO/WFC) wiederholt.

Aus zwei Gründen werden die Übungen mit Code in verschiedenen Sprachen vorgestellt:

  • Bei der Dokumentation von RDS wird davon ausgegangen, dass in Visual Basic programmiert wird. Dadurch ist diese Dokumentation beim Programmieren in Visual Basic sehr nützlich, sie ist jedoch für das Programmieren in anderen Sprachen wenig hilfreich.

  • Wenn Sie sich bei einem bestimmten RDS-Feature unsicher sind und sich in einer anderen Sprache auskennen, können Sie Ihre Frage unter Umständen beantworten, indem Sie nachsehen, wie dieses Feature in einer anderen Sprache formuliert ist.

Präsentation der Übungen

Diese Übungen basieren auf dem RDS-Programmiermodell. Sie beschreiben jeden Schritt des Programmiermodells einzeln. Darüber hinaus wird jeder Schritt durch einen Codeausschnitt in Visual Basic veranschaulicht.

Das Codebeispiel wird in anderen Sprachen wiederholt, ohne dass dies jedoch weiter erläutert wird. Jeder Schritt in einer programmiersprachenspezifischen Übung ist mit dem ihm entsprechenden Schritt in der Übung, die das Programmiermodell erläutert, gekennzeichnet. Die Nummer des jeweiligen Schrittes dient als Verweis auf die zugehörige Darstellung in den erläuternden Übungen.

Das RDS-Programmiermodell ist im Folgenden dargestellt. Verwenden Sie es als Leitfaden, der Sie durch die Übungen führt.

Das RDS-Programmiermodell mit Objekten

  • Angeben des Programms, das auf dem Server aufgerufen werden soll, und Bereitstellen einer Möglichkeit (eines Proxys), um vom Client aus darauf verweisen zu können.

  • Aufrufen des Serverprogramms. Übergeben der Parameter an das Serverprogramm, die die Datenquelle und den auszugebenden Befehl angeben.

  • Das Serverprogramm erhält ein Recordset-Objekt von der Datenquelle; dies geschieht in der Regel über ADO. Optional wird das Recordset-Objekt auf dem Server verarbeitet.

  • Das Serverprogramm gibt das erstellte Recordset-Objekt an die Clientanwendung zurück.

  • Auf dem Client wird das Recordset-Objekt optional in ein Formular umgewandelt, das von grafischen Steuerelementen einfach verwendet werden kann.

  • Veränderungen an dem Recordset-Objekt werden an das Serverprogramm zurückgeschickt, das damit die Datenquelle aktualisiert.

Weiter Schritt 1


Schritt 1: Angeben eines Serverprogramms (Übungen zu RDS)

Step 1: Angeben eines Serverprogramms (Übungen zu RDS)

Der hier erläuterte Schritt ist grafisch hervorgehoben...

  • Geben Sie das Programm an, das auf dem Server aufgerufen werden soll, und bestimmen Sie einen Proxy.

  • Aufrufen des Serverprogramms. Übergeben der Parameter an das Serverprogramm, die die Datenquelle und den auszugebenden Befehl angeben.

  • Das Serverprogramm erhält ein Recordset-Objekt von der Datenquelle; dies geschieht in der Regel über ADO.

  • Das Serverprogramm gibt das erstellte Recordset-Objekt an die Clientanwendung zurück.

  • Auf dem Client wird das Recordset-Objekt optional in ein Formular umgewandelt, das von grafischen Steuerelementen einfach verwendet werden kann.

  • Veränderungen an dem Recordset-Objekt werden an das Serverprogramm zurückgeschickt, das damit die Datenquelle aktualisiert.

Erläuterung

In den meisten Fällen können Sie die CreateObject-Methode des RDS.DataSpace-Objekts verwenden, um das Standardserverprogramm, RDSServer.DataFactory, oder ein benutzerdefiniertes Serverprogramm (Geschäftsobjekt) anzugeben. Ein Serverprogramm wird auf dem Server instantiiert und es wird ein Verweis auf das Serverprogramm oder den Proxy zurückgegeben.

In dieser Übung wird das Standardserverprogramm verwendet:

Sub RDSTutorial1()
Dim DS as New RDS.DataSpace
Dim DF as Object
Set DF = DS.CreateObject("RDSServer.DataFactory", "http://yourServer")
...

Weiter Schritt 2


Schritt 2: Aufrufen des Serverprogramms (Übungen zu RDS)

Der hier erläuterte Schritt ist grafisch hervorgehoben...

  • Geben Sie das Programm an, das auf dem Server aufgerufen werden soll, und bestimmen Sie einen Proxy.

  • Aufrufen des Serverprogramms. Übergeben der Parameter an das Serverprogramm, die die Datenquelle und den auszugebenden Befehl angeben.

  • Das Serverprogramm erhält ein Recordset-Objekt von der Datenquelle; dies geschieht in der Regel über ADO.

  • Das Serverprogramm gibt das erstellte Recordset-Objekt an die Clientanwendung zurück.

  • Auf dem Client wird das Recordset-Objekt optional in ein Formular umgewandelt, das von grafischen Steuerelementen einfach verwendet werden kann.

  • Veränderungen an dem Recordset-Objekt werden an das Serverprogramm zurückgeschickt, das damit die Datenquelle aktualisiert.

Erläuterung

Wenn Sie eine Methode auf dem Client-Proxy aufrufen, führt das Programm auf dem Server die Methode aus. Bei diesem Schritt führen Sie eine Abfrage auf dem Server durch.

Teil A In dieser Übung soll RDSServer.DataFactory verwendet werden; andernfalls ließe sich dieser Schritt am praktischsten mit dem RDS.DataControl-Objekt durchführen. Mit dem RDS.DataControl–Objekt kombinieren Sie den vorherigen Schritt, das Erstellen eines Proxy, und diesen Schritt, das Ausgeben der Abfrage.

Setzen Sie die Server-Eigenschaft des RDS.DataControl-Objekts, um zu bestimmen, wo das Serverprogramm instantiiert werden soll, die Connect-Eigenschaft, um die Verbindungszeichenfolge für den Zugriff auf die Datenquelle anzugeben, und die SQL-Eigenschaft, um den Text des Abfragebefehls anzugeben. Geben Sie dann die Refresh-Methode aus, damit das Serverprogramm eine Verbindung zur Datenquelle herstellt, die in der Abfrage angegebenen Zeilen abruft und ein Recordset-Objekt an den Client zurückgibt.

In dieser Übung wird das RDS.DataControl–Objekt nicht verwendet, andernfalls würde dies folgendermaßen aussehen:

Sub RDSTutorial2A()
Dim DC as New RDS.DataControl
DC.Server = "http://yourServer"
DC.Connect = "DSN=pubs"
DC.SQL = "SELECT * FROM authors"
DC.Refresh
...

Ebensowenig wird in dieser Übung RDS mit ADO-Objekten aufgerufen; sonst sähe dies folgendermaßen aus:

Dim rs as New ADODB.Recordset
rs.Open "SELECT * FROM authors", "Provider=MS Remote;Data Source=pubs;Remote Server=http://YourServer"

Teil B Im Allgemeinen wird dieser Schritt ausgeführt, indem die Query-Methode des RDSServer.DataFactory-Objekts aufgerufen wird. Diese Methode benötigt eine Verbindungszeichenfolge, die zum Aufbau einer Verbindung zur Datenquelle verwendet wird, und Befehlstext, der zur Angabe der Zeilen verwendet wird, die von der Datenquelle zurückgegeben werden sollen.

In dieser Übung wird die Query-Methode von RDSServer.DataFactory verwendet:

Sub RDSTutorial2B()
Dim DS as New RDS.DataSpace
Dim DF
Dim RS as ADODB.Recordset
Set DF = DS.CreateObject("RDSServer.DataFactory", "http://yourServer")
Set RS = DF.Query ("DSN=pubs", "SELECT * FROM authors")
...

Weiter Schritt 3


Schritt 3: Server erhält ein Recordset-Objekt (Übungen zu RDS)

Der hier erläuterte Schritt ist grafisch hervorgehoben...

  • Geben Sie das Programm an, das auf dem Server aufgerufen werden soll, und bestimmen Sie einen Proxy.

  • Aufrufen des Serverprogramms. Übergeben der Parameter an das Serverprogramm, die die Datenquelle und den auszugebenden Befehl angeben.

  • Das Serverprogramm erhält ein Recordset-Objekt von der Datenquelle; dies geschieht in der Regel über ADO.

  • Das Serverprogramm gibt das erstellte Recordset-Objekt an die Clientanwendung zurück.

  • Auf dem Client wird das Recordset-Objekt optional in ein Formular umgewandelt, das von grafischen Steuerelementen einfach verwendet werden kann.

  • Veränderungen an dem Recordset-Objekt werden an das Serverprogramm zurückgeschickt, das damit die Datenquelle aktualisiert.

Erläuterung

Das Serverprogramm verwendet die Verbindungszeichenfolge und den Befehlstext, um die Datenquelle nach den gewünschten Zeilen abzufragen. In der Regel wird ADO zum Abrufen des Recordset-Objekts verwendet, obwohl auch andere Microsoft-Schnittstellen für den Datenzugriff verwendet werden können, z. B. OLE DB. Eine detaillierte Beschreibung der Durchführung von Abfragen finden Sie in den Übungen zu ADO.

Ein benutzerdefiniertes Serverprogramm kann folgendermaßen aussehen:

Public Function ServerProgram(conn as String, qry as String) as Object
Dim rs as New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.Open cn, qry, adOpenUnspecified, adLockUnspecified, _
  adCmdUnspecified
Set ServerProgram = rs
End Function

Weiter Schritt 4


Schritt 4: Server gibt das Recordset-Objekt zurück (Übungen zu RDS)

Schritt 4: Server gibt ein Recordset-Objekt zurück (Übungen zu RDS)

Der hier erläuterte Schritt ist grafisch hervorgehoben...

  • Geben Sie das Programm an, das auf dem Server aufgerufen werden soll, und bestimmen Sie einen Proxy.

  • Aufrufen des Serverprogramms. Übergeben der Parameter an das Serverprogramm, die die Datenquelle und den auszugebenden Befehl angeben.

  • Das Serverprogramm erhält ein Recordset-Objekt von der Datenquelle; dies geschieht in der Regel über ADO.

  • Das Serverprogramm gibt das erstellte Recordset-Objekt an die Clientanwendung zurück.

  • Auf dem Client wird das Recordset-Objekt optional in ein Formular umgewandelt, das von grafischen Steuerelementen einfach verwendet werden kann.

  • Veränderungen an dem Recordset-Objekt werden an das Serverprogramm zurückgeschickt, das damit die Datenquelle aktualisiert.

Erläuterung

RDS konvertiert das abgerufene Recordset-Objekt in ein Formular, das an den Client zurückgeschickt werden kann (Marshaling des Recordset). Die exakte Form der Konvertierung und die Art der Versendung hängen davon ab, ob sich der Server im Internet, einem Intranet oder einem LAN befindet oder ob es sich um eine DLL (dynamic-link library) handelt. Dieses Detail ist jedoch nicht von großer Bedeutung; wichtig ist, dass RDS das Recordset-Objekt an den Client zurückschickt.

Auf der Client-Seite wird ein Recordset-Objekt zurückgegeben und einer lokalen Variable zugewiesen.

Sub RDSTutorial4()
Dim DS as New RDS.DataSpace
Dim RS as New ADODB.Recordset    'Optional ADOR.Recordset
Dim DF as Object
Set DF = DS.CreateObject("RDSServer.DataFactory", "http://yourServer")
Set RS = DF.Query("DSN=pubs", "SELECT * FROM authors")
...

Weiter Schritt 5


Schritt 5: DataControl wird nutzbar gemacht (Übungen zu RDS)

Der hier erläuterte Schritt ist grafisch hervorgehoben...

  • Geben Sie das Programm an, das auf dem Server aufgerufen werden soll, und bestimmen Sie einen Proxy.

  • Aufrufen des Serverprogramms. Übergeben der Parameter an das Serverprogramm, die die Datenquelle und den auszugebenden Befehl angeben.

  • Das Serverprogramm erhält ein Recordset-Objekt von der Datenquelle; dies geschieht in der Regel über ADO.

  • Das Serverprogramm gibt das erstellte Recordset-Objekt an die Clientanwendung zurück.

  • Auf dem Client wird das Recordset-Objekt optional in ein Formular umgewandelt, das von grafischen Steuerelementen einfach verwendet werden kann.

  • Veränderungen an dem Recordset-Objekt werden an das Serverprogramm zurückgeschickt, das damit die Datenquelle aktualisiert.

Erläuterung

Das zurückgegebene Recordset-Objekt steht nun zur Verfügung. Sie können es wie jedes andere Recordset durchsuchen, sich durch das Objekt bewegen oder es bearbeiten. Welche Funktionsmerkmale Ihnen mit dem Recordset zur Verfügung stehen, hängt von der verwendeten Umgebung ab. Microsoft Visual Basic und Visual C++ verfügen über grafische Steuerelemente, die ein Recordset–Objekt direkt oder indirekt, d. h. mit Hilfe eines "aktivierenden" Daten-Steuerelements, verwenden können.

Wenn Sie z. B. eine Webseite mit Microsoft® Internet Explorer anzeigen, möchten Sie unter Umständen die Daten des Recordset-Objekts in einem grafischen Steuerelement anzeigen. Grafische Steuerelemente auf einer Webseite können nicht direkt auf ein Recordset-Objekt zugreifen. Sie können aber über RDS.DataControl auf ein Recordset-Objekt zugreifen (d. h. es daran binden). RDS.DataControl kann über grafische Steuerelemente verwendet werden, wenn die SourceRecordset-Eigenschaft auf das Recordset-Objekt gesetzt ist.

(Der DATASRC-Parameter des grafischen Steuerelementobjekts muss auf RDS.DataControl gesetzt sein; und die DATAFLD-Eigenschaft muss auf ein Feld (eine Spalte) des Recordset-Objekts gesetzt sein.)

In dieser Übung wird die SourceRecordset-Eigenschaft gesetzt.

Sub RDSTutorial5()
Dim DS as New RDS.DataSpace
Dim RS as New ADODB.Recordset    'Optional ADOR.Recordset
Dim DC as New RDS.DataControl
Dim DF as Object
Set DF = DS.CreateObject("RDSServer.DataFactory", "http://yourServer")
Set RS = DF.Query ("DSN=pubs", "SELECT * FROM authors")
DC.SourceRecordset = RS            Grafische Steuerelemente können jetzt
'an DC gebunden werden.
...

Weiter Schritt 6


Schritt 6: Änderungen werden an den Server gesendet (Übungen zu RDS)

Der hier erläuterte Schritt ist grafisch hervorgehoben...

  • Geben Sie das Programm an, das auf dem Server aufgerufen werden soll, und bestimmen Sie einen Proxy.

  • Aufrufen des Serverprogramms. Übergeben der Parameter an das Serverprogramm, die die Datenquelle und den auszugebenden Befehl angeben.

  • Das Serverprogramm erhält ein Recordset-Objekt von der Datenquelle; dies geschieht in der Regel über ADO.

  • Das Serverprogramm gibt das erstellte Recordset-Objekt an die Clientanwendung zurück.

  • Auf dem Client wird das Recordset-Objekt optional in ein Formular umgewandelt, das von grafischen Steuerelementen einfach verwendet werden kann.

  • Veränderungen an dem Recordset-Objekt werden an das Serverprogramm zurückgeschickt, das damit die Datenquelle aktualisiert.

Erläuterung

Wenn ein Recordset-Objekt bearbeitet wird, können alle Änderungen (d. h. Zeilen, die hinzugefügt, geändert oder gelöscht wurden) zurück an den Server geschickt werden.

Anmerkung Das Standardverhalten von RDS kann implizit mit Hilfe von ADO-Objekten und dem Microsoft OLE DB Remoting Provider aufgerufen werden. Bei Abfragen können Recordsets zurückgegeben werden und die Datenquelle kann mit bearbeiteten Recordsets aktualisiert werden. In dieser Übung wird RDS nicht mit ADO-Objekten aufgerufen; sonst sähe dies folgendermaßen aus:

Dim rs as New ADODB.Recordset
rs.Open "SELECT * FROM authors", "Provider=MS Remote;Data Source=pubs;Remote Server=http://YourServer"
...            'Bearbeiten Sie das Recordset-Objekt.
rs.UpdateBatch    'Entspricht SubmitChanges.
...

Teil A Nehmen Sie für diesen Fall an, dass nur RDS.DataControl verwendet worden ist und nun ein Recordset-Objekt mit RDS.DataControl verbunden ist. Mit der SubmitChanges-Methode wird die Datenquelle mit allen Änderungen des Recordset-Objekts aktualisiert, wenn die Eigenschaften Server und Connect immer noch gesetzt sind.

Sub RDSTutorial6A()
Dim DC as New RDS.DataControl
Dim RS as New ADODB.Recordset    'Optional ADOR.Recordset
DC.Server = "http://yourServer"
DC.Connect = "DSN=pubs"
DC.SQL = "SELECT * FROM authors"
DC.Refresh
...
Set RS = DC.Recordset
...                                    'Bearbeiten Sie das Recordset-Objekt.
...
DC.SubmitChanges
...

Teil B Alternativ könnten Sie den Server auch mit dem RDSServer.DataFactory-Objekt aktualisieren, indem Sie eine Verbindung und ein Recordset-Objekt angeben.

Sub RDSTutorial6B()
Dim DS as New RDS.DataSpace
Dim RS as New ADODB.Recordset    'Optional ADOR.Recordset
Dim DC as New RDS.DataControl
Dim DF as Object
Set DF = DS.CreateObject("RDSServer.DataFactory", "http://yourServer")
Set RS = DF.Query ("DSN=pubs", "SELECT * FROM authors")
DC.SourceRecordset = RS            'Grafische Steuerelemente können jetzt 'an DC gebunden werden.
...                                    'Bearbeiten Sie das Recordset-Objekt.
blnStatus = DF.SubmitChanges "DSN=pubs", RS

Hier endet die Übung.


Übungen zu RDS (VBScript)

Hier wird die Übung zu RDS noch einmal übersichtlich dargestellt, diesmal in Microsoft Visual Basic, Scripting Edition.

In dieser Übung werden RDS.DataControl und RDS.DataSpace zur Entwurfszeit erstellt, d. h., sie werden über OBJECT-Tags definiert, die wie die folgenden aussehen: <OBJECT>...</OBJECT>. Alternativ könnten sie zur Laufzeit mit der Server.CreateObject–Methode erstellt werden. Das RDS.DataControl–Objekt könnte z. B. folgendermaßen erstellt werden:

Set DC = Server.CreateObject("RDS.DataControl")

<!-- RDS.DataControl -->
<OBJECT
    ID="DC1" CLASSID="CLSID:BD96C556-65A3-11D0-983A-00C04FC29E33">
</OBJECT>

<!-- RDS.DataSpace -->
<OBJECT
    ID="DS1" WIDTH=1 HEIGHT=1
    CLASSID="CLSID:BD96C556-65A3-11D0-983A-00C04FC29E36">
</OBJECT>

<SCRIPT LANGUAGE="VBScript">

Sub RDSTutorial()
Dim DF1 as Object

Schritt 1 – Angeben eines Serverprogramms

VBScript kann den Namen des IIS-Webservers herausfinden, auf dem es ausgeführt wird, indem es auf die VBScript Request.ServerVariables-Methode zugreift, die Active Server Pages zur Verfügung steht:

"http://<%=Request.ServerVariables("SERVER_NAME")%>"

In dieser Übung wird jedoch ein fiktiver Server, "yourServer", verwendet.

Anmerkung Achten Sie auf den Datentyp der ByRef-Argumente. Bei VBScript können Sie den Variablentyp nicht angeben, also müssen Sie immer einen Datentyp Variant übergeben. Wenn Sie HTTP verwenden, können Sie bei RDS einen Datentyp Variant an eine Methode übergeben, die einen anderen Datentypen als Variant erwartet, wenn sie mit der CreateObject-Methode des RDS.DataSpace-Objekts aufgerufen wird. Wenn Sie DCOM oder einen prozessinternenen Server verwenden, stimmen Sie die Parametertypen auf der Client- und Serverseite ab, sonst erhalten Sie einen "Typen unverträglich"-Fehler.

Set DF1 = DS1.CreateObject("RDSServer.DataFactory", "http://yourServer")

Schritt 2a - Aufrufen des Serverprogramms mit RDS.DataControl

Dieses Beispiel ist nur ein Kommentar zur Erläuterung, dass das Standardverhalten von RDS.DataControl darin besteht, die angegebene Abfrage durchzuführen.

<OBJECT CLASSID="clsid:BD96C556-65A3-11D0-983A-00C04FC29E33" ID="DC1">
    <PARAM NAME="SQL" VALUE="SELECT * FROM authors">
    <PARAM NAME="Connect" VALUE="DSN=Pubs;">
    <PARAM NAME="Server" VALUE="http://YourServer/">
</OBJECT>
...
<SCRIPT LANGUAGE="VBScript">

Sub RDSTutorial2A()
Dim RS as New ADODB.Recordset
DC1.Refresh
Set RS = DC1.Recordset
...

Schritt 2b – Aufrufen des Serverprogramms mit RDSServer.DataFactory

Schritt 3 – Server erhält ein Recordset-Objekt

Schritt 4 – Server gibt das Recordset-Objekt zurück

Set RS = DF1.Query("DSN=pubs", "SELECT * FROM authors")

Schritt 5 – DataControl wird für grafische Steuerelemente nutzbar gemacht

' Zuweisung des zurückgegebenen Recordset-Objekts an DataControl.

DC1.SourceRecordset = RS

Schritt 6a – Änderungen werden mit RDS.DataControl an den Server gesendet

Dieses Beispiel ist nur ein Kommentar, der zeigen soll, wie RDS.DataControl Aktualisierungen durchführt.

<OBJECT CLASSID="clsid:BD96C556-65A3-11D0-983A-00C04FC29E33" ID="DC1">
    <PARAM NAME="SQL" VALUE="SELECT * FROM authors">
    <PARAM NAME="Connect" VALUE="DSN=Pubs;">
    <PARAM NAME="Server" VALUE="http://YourServer/">
</OBJECT>
...
<SCRIPT LANGUAGE="VBScript">

Sub RDSTutorial6A()
Dim RS as New ADODB.Recordset
DC1.Refresh
...
Set RS = DC1.Recordset
' Bearbeiten Sie das Recordset-Objekt...
' Die Eigenschaften SERVER und CONNECT wurden bereits in
' Schritt 2A gesetzt.
Set DC1.SourceRecordset = RS
...
DC1.SubmitChanges

Schritt 6b – Änderungen werden mit RDSServer.DataFactory an den Server gesendet

DF.SubmitChanges "DSN=pubs", RS

End Sub
</SCRIPT>
</BODY>
</HTML>

Hier endet die Übung.


Übungen zu RDS (VJ++)

ADO/WFC folgt dem RDS-Objektmodell insofern nicht ganz, als es das DataControl-Objekt nicht implementiert. ADO/WFC implementiert nur die Client-Klasse DataSpace.

Die DataSpace-Klasse implementiert eine Methode, die createObject-Methode, die ein ObjectProxy-Objekt zurückgibt. Die DataSpace-Klasse implementiert auch die InternetTimeout-Eigenschaft.

Die ObjectProxy-Klasse implementiert eine Methode, die Call-Methode, die jedes Server-Geschäftsobjekt aufrufen kann.

Hier beginnt die Übung.

import com.ms.wfc.data.*;
public class RDSTutorial
{
    public void tutorial()
    {
// Schritt 1: Angeben eines Serverprogramms
        ObjectProxy obj =
            DataSpace.createObject(
                "RDSServer.DataFactory",
                "http://YourServer");

// Schritt 2: Server gibt ein Recordset-Objekt zurück
        Recordset rs = (Recordset) obj.call(
                "Query",
                new Object[] {"DSN=pubs", "SELECT * FROM authors"});

// Schritt 3: Änderungen werden an den Server gesendet
        ...                                // Bearbeiten des Recordset-Objekts
        obj.call(
                "SubmitChanges",
                new Object[] {"DSN=pubs", rs});
        return;
    }
}

Hier endet die Übung.


Erstellen einer einfachen Remote Data Service-Anwendung

Sie können das RDS.DataControl-Objekt zum Erstellen einer einfachen Active Server Pages-Datei verwenden, die auf eine reale Datenbank zugreift.

Diese Übung folgt dem "Minimalcode"-Prinzip, wogegen die Entwicklungsanleitung weitere Informationen über die Verwendung von RDS.DataControl enthält. In diesem Lernprogramm werden Sie eine Verbindung zu einer Microsoft® Access-Datenbank herstellen, einen Ergebnissatz in einer datengebundenen Tabelle anzeigen und die Möglichkeit zur Bewegung durch das angezeigte Recordset-Objekt hinzufügen. Im Folgenden werden die Schritte dargestellt, die beim Erstellen dieser einfachen Anwendung durchgeführt werden müssen:

  1. Identifizieren der Datenbank.

  2. Einfügen des Tabellen-Steuerelements und des RDS.DataControl-Objekts.

  3. Hinzufügen von HTML-Steuerelementen.

  4. Hinzufügen von Code zum Senden einer Abfrage an die Datenbank.

  5. Hinzufügen von Code zum Übermitteln von Änderungen an die Datenbank.

  6. Hinzufügen von Code zum Bewegen durch das angezeigte Recordset.

  7. Funktionsweise des Codes.

Wenn Sie eine abgeschlossene Version dieser Musteranwendung anzeigen möchten, gehen Sie zu http://<Webservername>/MSADC/Samples/ADCTest.asp, wobei <Webservername> dem Namen Ihres Webservers entspricht.


Identifizieren der Datenbank (RDS)

Bevor Sie die .asp-Datei erstellen, müssen Sie die Datenbank im ODBC-Applet in der Systemsteuerung identifizieren. In diesem Beispiel verwenden Sie eine Microsoft Access-Datenbank, die mit Remote Data Service zur Verfügung gestellt wird.

  1. Öffnen Sie die Systemsteuerung auf dem Computer, auf dem Ihr Webserver ausgeführt wird.

  2. Doppelklicken Sie auf das ODBC-Symbol, und klicken Sie dann auf System-DSN.

    Es gibt zwei Arten von Datenquellen: Datenquellen vom Typ Benutzer, die nur Ihnen zur Verfügung stehen, und Datenquellen vom Typ System, die für jeden Benutzer des Computers verfügbar sind. Datenquellen, die mit dem Webserver verwendet werden, müssen Systemdatenquellen sein.

  3. Klicken Sie auf Hinzufügen, markieren Sie Microsoft Access-Treiber, und klicken Sie dann auf Fertigstellen.

  4. Geben Sie in das Feld Datenquellenname den Begriff AdvWorks ein, und klicken Sie auf Auswählen. Wählen Sie unter C:\Programme\Gemeinsame Dateien\System\MSADC\Samples die Datei AdvWorks.mdb aus, und klicken Sie auf OK.

  5. Klicken Sie auf OK, um die Dialogfelder zu schließen.

Weiter


Einfügen des Tabellen-Steuerelements und des DataControl-Objekts (RDS)

  1. Verwenden Sie den Texteditor, um die Datei Tutorial.asp im Ordner C:\Programme\Gemeinsame Dateien\System\MSADC\Samples\Tutorial zu öffnen.

  2. Suchen Sie nach der Wortfolge "Tutorial: RDS.DataControl Object". Kopieren Sie das folgende Skript, und fügen Sie es unter diesem Kommentar ein.
    <OBJECT classid="clsid:BD96C556-65A3-11D0-983A-00C04FC29E33"
  ID=ADC HEIGHT=1 WIDTH = 1>
</OBJECT>
  3. Suchen Sie nach der Wortfolge "Tutorial: Data Bound Grid Control". Kopieren Sie das folgende Skript, und fügen Sie es unter diesem Kommentar ein.
    <BR>
<Center>
<OBJECT ID="GRID" WIDTH=600 HEIGHT=200 Datasrc="#ADC"
 CODEBASE="http://<%=Request.ServerVariables("SERVER_NAME")%>/MSADC/Samples/ssdatb32.cab"
 CLASSID="CLSID:AC05DC80-7DF1-11d0-839E-00A024A94B3A">
    <PARAM NAME="_Version"      VALUE="131072">
    <PARAM NAME="BackColor"   VALUE="-2147483643">
    <PARAM NAME="BackColorOdd"  VALUE="-2147483643">
    <PARAM NAME="ForeColorEven" VALUE="0">
    <PARAM NAME="AllowAddNew" VALUE="TRUE">
    <PARAM NAME="AllowDelete" VALUE="TRUE">
    <PARAM NAME="AllowUpdate" VALUE="TRUE">
</OBJECT>
<BR>

    Der DATASRC-Parameter im OBJECT-Tag des Tabellen-Steuerelements (Grid) zeigt an, dass das RDS.DataControl-Objekt ADC die Datenquelle sein wird. Dadurch ist das Tabellen-Steuerelement an das zurückgegebene Recordset gebunden, und das Tabellen-Steuerelement zeigt Daten an, wenn RDS.DataControl ein Recordset erhält. Mit den Parametern AllowAddNew, AllowDelete und AllowUpdate kann das Tabellen-Steuerelement Einfügungen, Änderungen und Löschvorgänge des Benutzers aufzeichnen.

Weiter


Hinzufügen von HTML-Steuerelementen (RDS)

  1. Suchen Sie nach der Wortfolge "Tutorial: HTML Controls to Get Recordsets". Kopieren Sie das folgende Skript, und fügen Sie es unter diesem Kommentar ein.
    <BR>
<table>
    <tr><td>RDS Server:<td><INPUT NAME=Server SIZE=70>
    <tr><td>Connection:<td><INPUT NAME=Connect SIZE=70>
    <tr><td>Query:<td><INPUT NAME=SQL SIZE=70>
</table>

    Dadurch werden Textfelder hinzugefügt, die Benutzer zur Angabe einer SQL-Abfrage, die an eine Datenbank gesendet werden soll (angegeben im Datenquellennamen), verwenden können, die ein nicht verbundenes Recordset an den Client zurückgibt.

  2. Suchen Sie nach der Wortfolge "Tutorial: HTML Controls to Navigate the Recordset and Run the Query". Kopieren Sie das folgende Skript, und fügen Sie es unter diesem Kommentar ein.
    <BR>
<BR>
<INPUT TYPE=BUTTON NAME="Run" VALUE="Run!" >
<INPUT TYPE=BUTTON NAME="First" VALUE="First" >
<INPUT TYPE=BUTTON NAME="Next" VALUE="Next" >
<INPUT TYPE=BUTTON NAME="Prev" VALUE="Previous" >
<INPUT TYPE=BUTTON NAME="Last" VALUE="Last" >
<INPUT TYPE=BUTTON NAME="Submit" VALUE="Submit Changes" >
</CENTER>

    Über die Schaltflächen für den ersten, vorhergehenden, nächsten und letzten Datensatz steht Benutzern ein Mechanismus für das Bewegen durch das angezeigte Recordset zur Verfügung.

Weiter


Hinzufügen von Code zum Senden einer Abfrage an die Datenbank (RDS)

Suchen Sie nach der Wortfolge "Tutorial: Send a Query to the Database". Kopieren Sie das folgende Skript, und fügen Sie es unter diesem Kommentar ein.

SUB Run_OnClick
    ADC.Server = Server.Value
    ADC.Connect = Connect.Value
    ADC.SQL = SQL.Value

    ADC.Refresh
END SUB

Anmerkung Wenn Sie die Datenquelle über die Connect-Eigenschaft festlegen, werden Sie in der Regel einen Datenquellennamen, eine Benutzer-ID und ein Kennwort angeben (z. B. "DSN=SalesDB;UID=Manager;PWD=secret;"). Bei Microsoft Access-Datenbanken ist es nicht erforderlich, dass Sie eine Benutzer-ID (UID) oder ein Kennwort (PWD) angeben.

Weiter


Hinzufügen von Code zum Übermitteln von Änderungen an die Datenbank

Suchen Sie nach der Wortfolge "Tutorial: Submit Changes to the Database". Kopieren Sie das folgende Skript, und fügen Sie es unter diesem Kommentar ein.

SUB Submit_OnClick  ' Auf Schaltfläche Submit Changes geklickt.
  ADC.SubmitChanges ' Änderungen an DBMS schicken.
  ADC.Refresh         ' Recordset aktualisieren.
End Sub

Wird ADC.SubmitChanges ausgeführt, erstellt Remote Data Service aus allen Aktualisierungsinformationen ein Paket und sendet dieses über HTTP an den Server. Die Aktualisierung erfolgt vollständig oder gar nicht; ist ein Teil der Aktualisierung nicht erfolgreich, wird keine der Änderungen durchgeführt und eine Statusmeldung zurückgegeben.

Weiter


Hinzufügen von Code zum Bewegen durch das angezeigte Recordset (RDS)

Sie können die Move-Methoden mit dem Recordset-Objekt im RDS.DataControl-Objekt verwenden, um sich durch die angezeigten Datensätze in den datengebundenen Steuerelementen auf einer Webseite zu bewegen. Angenommen, Sie zeigen z. B. ein Recordset-Objekt in einer Tabelle an, indem Sie sie an ein RDS.DataControl-Objekt binden. Sie können dann die Schaltflächen für den ersten, vorhergehenden, nächsten und letzten Datensatz einfügen, die Benutzer verwenden können, um zum entsprechenden Datensatz im angezeigten Recordset zu gelangen. Dafür müssen Sie die Methoden MoveFirst, MoveLast, MoveNext und MovePrevious des RDS.DataControl-Objekts in den OnClick-Prozeduren für die Schaltflächen für den ersten, vorhergehenden, nächsten und letzten Datensatz entsprechend aufrufen.

Suchen Sie nach der Wortfolge "Tutorial: Move Through the Displayed Recordset". Kopieren Sie das folgende Skript, und fügen Sie es unter diesem Kommentar ein.

SUB First_OnClick
    ADC.Recordset.MoveFirst
END SUB

SUB Next_OnClick
    If ADC.Recordset.EOF Then
    'Kann nicht weiter als zum
    'letzten Datensatz gehen
        ADC.Recordset.MoveFirst
        Exit Sub
    End If

    ADC.Recordset.MoveNext
END SUB

SUB Prev_OnClick
    If ADC.Recordset.BOF Then
    'kann nicht weiter als zum
    'ersten Datensatz gehen
        ADC.Recorset.MoveFirst    'aus BOF-Puffer hinaus bewegen
        ADC.Recordset.MoveLast
        Exit Sub
    End If
    ADC.Recordset.MovePrevious
END SUB

SUB Last_OnClick
    ADC.Recordset.MoveLast
END SUB

Weiter


Funktionsweise des Codes (RDS)

  1. Speichern Sie die Änderungen an der Datei Tutorial.asp als Textdatei und beenden Sie den Texteditor. Achten Sie darauf, dass der Texteditor die .asp-Dateinamenerweiterung nicht ersetzt. Eine .asp-Datei ist eine Active Server Pages-Skriptdatei.

  2. Um zu überprüfen, ob die von Ihnen erstellte ASP-Seite funktioniert, zeigen Sie in Ihrem Browser auf http://<Webservername>/MSADC/Samples/Tutorial/Tutorial.asp, wobei <Webservername> dem tatsächlichen Namen Ihres Webservers entspricht.

    Anmerkung Sie müssen auf die ASP-Seite zugreifen, indem Sie auf die Adresse zeigen. Sie öffnet sich nicht fehlerfrei, wenn Sie im Menü Datei den Befehl Öffnen verwenden oder wenn Sie auf die .asp-Datei doppelklicken.

Wenn Sie die Seite laden, klicken Sie auf Run!, um das Tabellen-Steuerelement (Grid) mit Daten zu füllen. Sie können die Abfrage oder andere Parameter ändern und erneut auf Run! klicken, um andere Daten anzuzeigen.


Übung: Address Book

In dieser Beispielanwendung wird gezeigt, wie Sie Remote Data Service zum Aufbau einer einfachen, datenbezogenen Webanwendung - einem Online-Adressbuch für ein Unternehmen - verwenden können. Diese Übung ist zum Programmieren in Microsoft® Visual Basic®, Scripting Edition (VBScript) und ActiveX® nützlich, wenn Sie lernen möchten, wie datenbezogene ActiveX-Steuerelemente mit Remote Data Service verwendet werden können, und sie ist für erfahrenere Anwendungsentwickler nützlich, die datenverarbeitende Webanwendungen erstellen möchten.

In der Übung wird vorausgesetzt, dass Sie mit der Verwendung grundlegender HTML-Layouttags und dem Programmieren mit ActiveX-Steuerelementen vertraut sind.

Folgende Bereiche werden in der Übung zu Address Book behandelt:

  • Sicherstellen, dass die Systemanforderungen erfüllt werden, um diese Anwendung ausführen zu können.

  • Einrichten der Umgebung, um eine Verbindung mit einer Datenbank herzustellen, und Ausführen einer SQL-Abfrage, um die Beispieldaten zu kopieren.

  • Einrichten des HTML-Grundgerüsts auf der Webseite und Schreiben von VBScript-Code, um Benutzerereignisse zu verarbeiten.

Einführung in Address Book

Bei der Beispielanwendung Address Book handelt es sich um ein Online-Adressbuch, mit dem Sie ein Verzeichnis im Intranet veröffentlichen können. Das Adressbuch ist so aufgebaut, dass ein Benutzer eine Suchzeichenfolge in ein oder mehrere Felder eingeben kann, um Daten über Angestellte abzufragen. Damit Ihnen die wichtigsten Features von Remote Data Service gezeigt werden können, ist die Beispielanwendung absichtlich klein gehalten worden und verfügt über eine minimale Anzahl an Objekten und Suchfeldern.

Die Schnittstelle der Anwendung besteht aus den folgenden Teilen:

  • Textfelder, die als Suchfelder für verschiedene Arten von Informationen über Angestellte verwendet werden.

  • Befehlsschaltflächen zum Erstellen von Abfragen, Löschen von Suchfeldern, Aktualisieren der Datenbank mit Informationen über Angestellte oder zum Abbrechen anstehender Änderungen.

  • Ein Tabellen-Steuerelement, das wie eine Kalkulationstabelle aufgebaut ist, in dem die Suchergebnisse angezeigt werden und das über ein nicht grafisches RDS.DataControl-Datenbindungsobjekt an eine Back-End-Datenbank gebunden ist.

  • Schaltflächen, mit denen Sie sich durch die Datenzeilen bewegen können, die im Tabellen-Steuerelement angezeigt werden.


Ausführen der Beispielanwendung Address Book

Gehen Sie folgendermaßen vor, um die Anwendung Address Book innerhalb von kurzer Zeit einzurichten und auszuführen.

So führen Sie diese Anwendung aus

  1. Stellen Sie sicher, dass die Systemanforderungen erfüllt sind.

  2. Richten Sie den ODBC-System-DSN ein.

  3. Führen Sie das SQL-Skript aus, um die Daten in die Microsoft SQL Server-Datenbank zu laden.

  4. Stellen Sie sicher, dass Microsoft® SQL Server™ ausgeführt wird. Klicken Sie auf Start, zeigen Sie auf Programme, zeigen Sie auf Microsoft SQL Server 6.5, und klicken Sie dann auf SQL Service Manager. Ist das Ampelsymbol grün, wird SQL Server ausgeführt. Ist es nicht grün, klicken Sie auf Starten/Weiter.

  5. Geben Sie in Microsoft® Internet Explorer, Version 4.0 oder höher, die folgende Adresse ein:

    http://Webserver/msadc/samples/AddressBook/AddrBook.asp

    wobei Webserver der Name des Webservers ist, auf dem die Serverkomponenten von Remote Data Service installiert sind und auf dem Sie die System-DSN erstellt haben.

  6. Anschließend können Sie verschiedene Situationen mit der Beispielanwendung Address Book durchgehen, z. B. können Sie auf der Grundlage des E-Mail-Namens nach einer Person suchen, alle Mitarbeiter mit dem Titel "Program Manager" auflisten oder vorhandene Datensätze bearbeiten und aktualisieren. Klicken Sie auf Find, um die Datentabelle mit allen verfügbaren Namen zu füllen.


Systemanforderungen für die Anwendung Address Book

Wenn Sie die Beispielanwendung Address Book installieren möchten, müssen folgende Software- und Datenbankanforderungen erfüllt sein.

Softwareanforderungen

Für das Ausführen dieser Webanwendung müssen folgende Softwareanforderungen an den Servercomputer erfüllt sein:

  • Microsoft® Windows NT® Server x86, Version 4.0, Service Pack 3 oder höher.

  • Microsoft® Internet Information Server (IIS) 3.0 oder höher mit Active Server Pages.

  • Serverspezifische DLLs für Remote Data Service. (Bei der Installation von Remote Data Service erfolgt dies automatisch.)

Für das Ausführen dieser Webanwendung müssen folgende Softwareanforderungen an den Clientcomputer erfüllt sein:

  • Microsoft® Internet Explorer 4.0 oder höher.

  • Microsoft® Windows NT® Workstation oder Microsoft® Windows® 95.

  • Clientspezifische DLLs für Remote Data Service, die auf dem Clientcomputer installiert sein müssen. Sie sind ein Teil der Installation von Internet Explorer 4.0.

Datenbankanforderungen

Zum Verwenden dieses Beispiels benötigen Sie Folgendes:

  • Eine funktionsfähige Datenbank in Microsoft SQL Server, Version 6.5.

  • Zugriffsrechte für die Datenbank.

  • Schreibrechte, damit Sie die Datenbank mit den Beispieldaten füllen können.

  • Die Bestandsdaten müssen mit den Dienstprogrammen Enterprise Manager oder ISQL überprüft werden.

Wenn Sie keine Zugriffsrechte haben, muss der Datenbankadministrator das System für Sie einrichten und Ihnen Zugriffsrechte für die Datenbank geben oder die Datenbank für Sie einrichten.

Wenn Sie diese Datenbankanforderungen erfüllen, folgen Sie den Anweisungen unter "Ausführen des SQL-Skripts für Address Book" und "Einrichten einer ODBC-Verbindung für Address Book".


Ausführen des SQL-Skripts für Address Book

Sie müssen entweder das ISQL-Befehlszeilendienstprogramm oder SQL Server Enterprise Manager verwenden, um ein SQL-Skript für folgende Verfahren auszuführen:

  • Erstellen einer neuen Datenbank, AddrBookDB, auf dem Standardgerät.

  • Herstellen einer Verbindung zur richtigen Datenbank (AddrBookDB; falls Sie die Datenbank umbenennen, achten Sie darauf, den Datenbanknamen in der Einrichtung der ODBC-Verbindungs-DSN zu ändern.)

  • Erstellen einer Tabelle "Employee".

  • Füllen der Tabelle mit Beispieldaten.

  • Starten einer einfachen SELECT-Anweisung, um den Bestand der Datenbanktabelle zu überprüfen.

  • Einrichten eines Benutzerkontos mit dem Namen "ADCDemo" und dem Kennwort "ADCDemo".

Sie müssen die mitgelieferte SQL-Skriptdatei (Sampleemp.sql) ausführen, um die Tabelle "Employee" zu erstellen und mit Daten zu füllen. Standardmäßig wird die Tabelle "Employee" in einer neu erstellten Datenbank, AddrBookDB, auf dem lokalen SQL-Server erstellt.

So führen Sie das Skript Sampleemp.sql aus

  1. Klicken Sie auf Start, zeigen Sie auf Programme, und zeigen Sie dann auf Microsoft SQL Server 6.5. Klicken Sie auf SQL Enterprise Manager.

  2. Wählen Sie im Menü Extras die Option SQL Abfrageprogramm.

  3. Klicken Sie auf die Schaltfläche SQL-Skript laden (den offenen Ordner auf der Symbolleiste) und wechseln Sie zu Programme\Gemeinsame Dateien\System\MSADC\Samples\AddressBook.

  4. Markieren Sie die Datei Sampleemp.sql. Klicken Sie auf Öffnen.

  5. Klicken Sie auf die Schaltfläche Abfrage ausführen (den grünen Pfeil auf der Symbolleiste).

  6. Nachdem die Option ausgeführt worden ist, schließen Sie die Fenster Abfrage und Enterprise Manager.


Einrichten einer ODBC-Verbindung für Address Book

Sie müssen einen ODBC-System-Datenquellennamen (DSN) auf dem Webserver einrichten, auf dem die Serverkomponenten für Remote Data Service installiert werden.

In diesem Fall wird vorausgesetzt, dass die Tabelle "Employee" in der Datenbank AddrBookDB auf einem lokalen SQL-Server, der auf einem Webserver ausgeführt wird, erstellt wurde, indem das SQL-Skript ausgeführt worden ist. Wenn Sie eine andere Datenbank oder einen anderen SQL-Server auf einem anderen Server verwenden möchten, müssen Sie die Werte für Server und Datenbankname im Dialogfeld ODBC SQL Server-Setup ändern. In diesem Fall müssen Sie auch einige kleine Änderungen in der mitgelieferten AddrBook-Seite vornehmen.

So richten Sie den DSN für einen Windows NT-Client ein

  1. Klicken Sie auf dem Webserver auf Start, zeigen Sie auf Einstellungen, und klicken Sie dann auf Systemsteuerung.

  2. Doppelklicken Sie in der Systemsteuerung auf das Symbol ODBC.

  3. Klicken Sie auf der Registerkarte System-DSN auf Hinzufügen.

  4. Markieren Sie im Feld Neue Datenquelle erstellen die Option SQL Server, und klicken Sie auf Fertigstellen.

  5. Folgen Sie den Anweisungen des Assistenten "Neue Datenquelle für SQL Server erstellen". Wenn Sie Hilfe benötigen, klicken Sie im Dialogfeld des Assistenten auf Hilfe.

  6. Wenn Sie den Vorgang beendet haben, klicken Sie auf OK, um zum Dialogfeld ODBC-Datenquellen-Administrator zurückzukehren. Klicken Sie auf Schließen, um das ODBC-Setup zu beenden.

So richten Sie den DSN für einen Windows 95-Client ein

  1. Klicken Sie auf dem Webserver auf Start, zeigen Sie auf Einstellungen, und klicken Sie dann auf Systemsteuerung.

  2. Doppelklicken Sie in der Systemsteuerung auf das Symbol ODBC.

  3. Klicken Sie auf System-DSN.

  4. Klicken Sie im Feld Systemdatenquellen auf Hinzufügen, markieren Sie SQL Server, und klicken Sie auf OK.

  5. Folgen Sie den Schritten 5 und 6 des vorangegangenen Verfahrens für den Windows NT-Client.


Code der Beispielanwendung Address Book – Übersicht

Der Programmcode für die Anwendung Address Book gliedert sich in die folgenden Abschnitte. In jedem Abschnitt wird eine Reihe von wichtigen Komponenten der Anwendung herausgestellt, der Quellcode für die Komponenten gezeigt und beschrieben, wie der Code funktioniert.

Jeder Abschnitt enthält auch den VBScript-Code, der als Reaktion auf Benutzerereignisse, z. B. ein Klicken, ausgeführt wird. Der VBScript-Teil der Anwendung Address Book stellt Suchtext in Abfragen zusammen, sendet die Anfragen an den Server, stellt fest, wo die vom Server zurückgegebenen Daten angezeigt werden sollen, und verarbeitet alle Ereignisse, die durch Klicken auf Schaltflächen ausgelöst werden.

Codeabschnitt | Beschreibung
HTML-Grundgerüst | Enthält das HTML-Gerüst, das den Anwendungscode einschließt.
Textfelder | Dienen als Suchfelder für verschiedene Arten von Informationen über Angestellte.
Befehlsschaltflächen | Erstellen Abfragen, löschen Suchfelder, aktualisieren die Datenbank mit Angestellteninformationen oder brechen anstehende Änderungen ab.
Tabellen-Steuerelement, das wie eine Kalkulationstabelle aufgebaut ist | Zeigt die Suchergebnisse an und ist über ein nicht grafisches RDS.DataControl-Datenbindungsobjekt an eine Back-End-Datenbank gebunden.
RDS.DataControl-Datenbindungsobjekt | Bindet Daten von der Microsoft SQL Server-Datenbank an das Tabellen-Steuerelement auf der HTML-Seite des Clients.
Navigationsschaltflächen | Werden zum Bewegen durch die Datenzeilen verwendet, die im Tabellen-Steuerelement angezeigt werden.
VBScript-Initialisierungscode | Initialisiert die Spaltenüberschriften der Datentabelle und den Tabellentitel.

Die Beispielanwendung Address Book ist so strukturiert, dass Sie das Erstellen einer einfachen Remote Data Service-Webanwendung Schritt für Schritt erlernen können, wobei in jedem Schritt neue Funktionen hinzugefügt werden. Zur Vereinfachung der Darstellung wird sich wiederholender Code in der Übung ausgelassen, und die Teile des Codes werden nicht immer gemäß ihrer Sequenz im Programm beschrieben. Klicken Sie hier, wenn Sie den vollständigen Quellcode für die Anwendung Address Book anzeigen möchten.

Kopieren Sie den Code der Übungsthemen, und fügen Sie ihn in Ihr Projekt ein, indem Sie einen Texteditor wie z. B. Notepad verwenden. Speichern Sie das Projekt unter Tutorial2.asp im Verzeichnis Programme\Gemeinsame Dateien\System\Msadc\Samples\Tutorial. Wenn Sie es anzeigen lassen möchten, geben Sie in Internet Explorer 4.0 folgende Adresse ein: http://Webserver/msadc/samples/Tutorial/Tutorial2.asp.
Hierbei setzen Sie für Webserver den Namen Ihres Windows NT Webservers ein, der Internet Information Server und ASP ausführt.


HTML-Grundgerüst für Address Book

Der erste Schritt beim Erstellen einer Remote Data Service-Anwendung besteht im Einrichten des Standard-Grundgerüsts für HTML-Webseiten. Das HTML-Gerüst enthält den Programmcode für die von Ihnen verwendeten Anwendungsobjekte, z. B. Schaltflächen, Textfelder und datenbezogene Steuerelemente.

Das folgende Codefragment zeigt das HTML-Gerüst für die Anwendung Address Book. Dieser Teil umfasst die Standardtags für HTML-Überschriften und Seitenlayout, Kommentare, durch die die Anwendung identifiziert wird, und den Text der Webseiten, Schriftart und Farbinformationen.

Kommentare werden an Positionen eingefügt, an denen sich die Anwendungsobjekte (wie Schaltflächen, Textfelder und datenbezogene Steuerelemente) befinden. An diesen Stellen können Sie eigene Anwendungskomponenten einfügen. Klicken Sie auf diese Platzhalterkommentare, um Beschreibungen zu diesen Teilen der Anwendung anzuzeigen.

Anmerkung Die meisten allgemeinen HTML-Tags und jene, durch die die Hintergrundattribute der Webseiten definiert werden, werden hier nicht definiert. Das SCRIPT-Tag zeigt an, dass die Steuerung an eine Skriptsprache – in diesem Fall VBScript – übergeben wurde.

<HTML>
<HEAD>
<TITLE>Corporate Address Book</TITLE>
</HEAD>

<!--
    Purpose:    To provide a company directory search service for Web users.
    Written By:    Microsoft Remote Data Service Team, Microsoft Corp.
    Date:        April, 1997
-->

<BODY BACKGROUND="Arcadia.gif" LANGUAGE="VBScript" onload="Load">
<tr>
    <td align="center" width="40%">
    <table border="2" cellpadding="7" cellspacing="7">
    <tr>
      <td width="100%"><font color="#160B5A"><font
      size="4"><strong>Arcadia Bay Corporate Phone Directory</strong></font></font></td>
    </tr>
    </table>
    </td>
</tr>

<hr>
<h2><font color = "#160B5A">Search Parameters</h2>
<h5><font color = "#160B5A">Please enter one or more search patterns and press FIND to search.</h5>

<PRE>First Name
<!-- HTML-CODE FÜR TEXTFELDER KOMMT HIERHIN -->

<!-- HTML-CODE FÜR BEFEHLSSCHALTFLÄCHEN KOMMT HIERHIN-->
<hr>
<h2><font color = "#400040">Search Results</h2>
</B>
<br>
<!-- HTML-CODE FÜR DATENTABELLE KOMMT HIERHIN -->
<!-- HTML-CODE FÜR NAVIGATIONSSCHALTFLÄCHEN KOMMT HIERHIN -->

<!-- CODE FÜR RDS.DATACONTROL-OBJEKT KOMMT HIERHIN -->

<SCRIPT Language="VBScript">

<!-- VBSCRIPT-CODE FÜR INITIALISIEREN LÖSCHEN VON TEXTFELDERN, ÜBERMITTELN EINER ABFRAGE, BEWEGEN DURCH DAS ANGEZEIGTE RECORDSET, SPEICHERN VON ÄNDERUNGEN IN EINEM DATENSATZ UND ABBRECHEN ANSTEHENDER ÄNDERUNGEN KOMMT HIERHIN. -->
</SCRIPT>

<BR>
<font color = "#400040">This site powered by Microsoft Remote Data Service. </font>
</BODY>
</HTML>


Textfelder von Address Book

Die Anwendung Address Book enthält vier Textfelder zum Eingeben von Suchausdrücken (z. B. das Feld First Name). Durch den folgenden HTML-Code werden die Textfeldobjekte definiert:

<PRE> First Name   <INPUT NAME=SFirst SIZE=30> </PRE>

<PRE> Last Name  <INPUT NAME=SLast  SIZE=30> </PRE>

<PRE> Title    <INPUT NAME=STitle SIZE=30> </PRE>

<PRE> E-mail Alias <INPUT NAME=SEmail SIZE=30> </PRE>

Das systeminterne INPUT-Steuerelement ist in HTML integriert. Der NAME-Parameter definiert, wie es im Code genannt wird. Der VBScript-Code kann z. B. SFirst.Value nach Text im Feld First Name untersuchen. Mit dem SIZE-Parameter können Sie die Länge des Textfeldes (in Zeichen) verändern.


Das Datenbindungsobjekt von Address Book

Die Anwendung Address Book verwendet das RDS.DataControl-Objekt, um Daten einer SQL Server-Datenbank an ein grafisches Objekt (in diesem Fall ist dies eine Tabellenanzeige) in der Client-HTML-Seite der Anwendung zu binden. Die ereignisgesteuerte VBScript-Programmlogik verwendet RDS.DataControl für folgende Verfahren:

  • Abfragen der Datenbank, Senden von Aktualisierungen an die Datenbank und Aktualisieren der Datentabelle.

  • Ermöglichen, dass Benutzer zum ersten, nächsten, vorherigen oder letzten Datensatz in der Datentabelle springen können.

Durch den folgenden Code wird die RDS.DataControl-Komponente definiert:

<OBJECT classid="clsid:BD96C556-65A3-11D0-983A-00C04FC29E33"
    ID=SControl Width=1 Height=1>
    <PARAM NAME="SERVER" VALUE="http://<%=Request.ServerVariables("SERVER_NAME")%>">
    <PARAM NAME="CONNECT" VALUE="dsn=ADCDemo;UID=ADCDemo;PWD=ADCDemo;">
</OBJECT>

Durch das OBJECT-Tag wird die RDS.DataControl-Komponente im Programm definiert. Das Tag enthält zwei Arten von Parametern:

  • Parameter, die mit dem generischen OBJECT-Tag verbunden sind.

  • Parameter, die eigens dem RDS.DataControl-Objekt zugehörig sind.

Generische Parameter des OBJECT-Tags

In der folgenden Tabelle sind die mit dem OBJECT-Tag verbundenen Parameter beschrieben.

Parameter | Beschreibung
CLASSID | Eine eindeutige, 128 Bit umfassende Zahl, durch die dem System die Art des eingebetteten Objekts angezeigt wird. Dieser Bezeichner wird in der Systemregistrierung des lokalen Computers verwaltet. (Informationen über die Klassenbezeichner des RDS.DataControl-Objekts finden Sie unter RDS.DataControl-Objekt.)
ID | Definiert einen für das gesamte Dokument gültigen Bezeichner für das eingebettete Objekt, das zu seiner Identifizierung im Code verwendet wird.

Tag-Parameter von RDS.DataControl

In der folgenden Tabelle sind die Parameter beschrieben, die für das RDS.DataControl-Objekt spezifisch sind. (Eine vollständige Liste der Parameter des RDS.DataControl-Objekts und Informationen darüber, wann sie implementiert werden, finden Sie unter RDS.DataControl-Objekt.)

Parameter | Beschreibung
SERVER | Wenn Sie HTTP verwenden, ist der Wert der Name des Servercomputers, dem HTTP:// vorangestellt ist.
CONNECT | Der erste Teil dieses VALUE-Wertes zeigt den System-DSN an, der auf die Datenquelle zeigt; der zweite und dritte Teil gibt die Benutzer-ID und das Kennwort an; beides ist für den Zugriff auf die Datenquelle erforderlich (z. B.: "DSN=ADCDEMO;UID=adcdemo;PWD=adcdemo;"). Wenn Sie hierzu zusätzliche Informationen benötigen, wenden Sie sich bitte an den Systemdatenbankadministrator.
SQL | Legt die Abfragezeichenfolge fest, die zum Abrufen des Recordset-Objekts verwendet wird, oder gibt diese zurück.


Befehlsschaltflächen von Address Book

Die Anwendung Address Book enthält folgende Befehlsschaltflächen:

  • Die Schaltfläche Find zum Übertragen einer Abfrage an die Datenbank.

  • Die Schaltfläche Clear zum Löschen der Textfelder, bevor mit einer neuen Suche begonnen wird.

  • Die Schaltfläche Update Profile zum Speichern der Änderungen an Angestelltendatensätzen.

  • Die Schaltfläche Cancel Changes zum Verwerfen von Änderungen.

Find-Schaltfläche

In der folgenden HTML-Anweisung wird die Schaltfläche Find definiert. Diese HTML-Anweisung steht vor dem VBScript-Abschnitt des Programms. Kopieren Sie den Code für dieses Steuerelement, und fügen Sie ihn direkt nach dem Kommentar für HTML-Befehlsschaltflächen ein.

<INPUT TYPE=BUTTON NAME="Find"     VALUE="Find">

Die Prozedur Find_OnClick

Durch Klicken auf die Schaltfläche Find wird die VBScript-Prozedur Find_OnClick ausgelöst, durch die eine SQL-Abfrage erstellt und übermittelt wird. Klicken Sie bei Beendigung dieses Projekts auf diese Schaltfläche, um die Datentabelle mit Daten zu füllen.

Erstellen der SQL-Abfrage

Durch den ersten Teil der Prozedur Find_OnClick wird die SQL-Abfrage Ausdruck für Ausdruck erstellt, indem Textzeichenfolgen an eine globale SQL SELECT-Anweisung angehängt werden. Zunächst wird die Variable myQuery auf eine SQL SELECT-Anweisung festgelegt, die alle Datenzeilen der Datenquellentabelle abfragt. Kopieren Sie diesen Code, und fügen Sie ihn nach dem ersten SCRIPT-Tag ein.

Sub Find_OnClick

myQuery = "Select FirstName, LastName, Title, Type, Email, " _
    & "ManagerEmail, Building, Room, Phone from Employee"

Danach durchsucht die Prozedur jedes der vier Eingabefelder von Address Book. Kopieren Sie diesen Code, und fügen Sie ihn in die Unterroutine Find_OnClick ein.

    If (SFirst.Value <> "") Then
        myQuery = myQuery + " where FirstName like '" + SFirst.Value + "%'"
    End If

    IF (SLast.Value <> "") Then
        myQuery = myQuery + " where LastName like '" + SLast.Value + "%'"
    End If

    If (STitle.Value <> "") Then
        myQuery = myQuery + " where Title like '" + STitle.Value + "%'"
    End If

    If (SEmail.Value <> "") Then
        myQuery = myQuery + " where Email like '" + SEmail.Value + "%'"
    End If

Durch jede If-Anweisung wird das entsprechende Textfeld nach Text durchsucht. Wenn das Textfeld Text enthält, wird die Then-Anweisung ausgeführt und der entsprechende Text an die globale SELECT-Anweisung angehängt, die in der Variable myQuery enthalten ist. Da das Programm das Wort like beim Erstellen der SQL-Anweisungen verwendet, handelt es sich bei den Abfragen eher um die Suche nach Teilzeichenfolgen als um exakte Übereinstimmungen.

Wenn z. B. das Feld Last Name den Eintrag "Berge" und das Feld Title den Eintrag "Program Manager" enthält, sieht die SQL-Anweisung (Wert von myQuery) folgendermaßen aus:

Select FirstName, LastName, Title, Email, Building, Room, Phone from Employee where lastname like 'Berge%' and title like 'Program Manager%'

War die Abfrage erfolgreich, werden alle Personen in der Datentabelle angezeigt, deren Nachname den Text "Berge" enthält (z. B. Berge und Berger) und deren Titel die Wörter "Program Manager" enthält (z. B. Program Manager, Advanced Technologies).

Vorbereiten und Senden einer Abfrage

Der letzte Teil der Prozedur Find_OnClick besteht aus zwei Anweisungen. Die erste Anweisung weist die SQL-Abfrageeigenschaft des RDS.DataControl-Objekts gleich der dynamisch erstellten SQL-Abfrage zu. Durch die zweite Anweisung fragt das RDS.DataControl-Objekt (SControl) die Datenbank ab und zeigt dann die neuen Ergebnisse der Abfrage in der Tabelle an. Kopieren Sie diesen Code, und fügen Sie ihn in die Unterroutine Find_OnClick ein.

    SControl.SQL = myQuery
    SControl.Refresh
End Sub

Clear-Schaltfläche

Durch die folgende HTML-Anweisung wird die Schaltfläche Clear definiert. Diese HTML-Anweisung steht vor dem VBScript-Abschnitt des Programms. Kopieren Sie diesen Code, und fügen Sie ihn nach der Schaltfläche Find HTML ein.

<INPUT TYPE=BUTTON NAME="Clear"     VALUE="Clear">

Durch das INPUT-Tag wird ein Element wie z. B. eine Schaltfläche, eine Optionsschaltfläche, ein Kontrollkästchen oder Text definiert. Sie verwenden den TYPE-Parameter, um das Element anzugeben, das in diesem Fall eine Schaltfläche ist. Durch den NAME-Parameter wird definiert, wie die Schaltfläche im Code genannt wird. Der VALUE-Parameter gibt die Beschriftungen an, die mit der Schaltfläche (Clear) verbunden sind und die auf der Seite angezeigt werden.

Die Prozedur Clear_OnClick

Durch Klicken auf die Schaltfläche Clear wird die VBScript-Prozedur Clear_OnClick ausgelöst. Kopieren Sie diesen Code, und fügen Sie ihn zwischen die SCRIPT- und /SCRIPT-Tags ein.

Sub Clear_OnClick
    SFirst.Value=""
    SLast.Value=""
    STitle.Value=""
    SEmail.Value=""
End Sub

Wenn die Prozedur ausgeführt wird, initialisiert sie jede der vier HTML-Eingabefelder, die sie durch den NAME-Parameter des ID-Tags erkennt. Die Eigenschaft .Value zeigt Zeichen im Textfeldobjekt an, die auf der Webseite angezeigt werden. Die Prozedur ersetzt jeden Text durch eine leere Zeichenfolge ("") in Vorbereitung auf eine neue Suche.

Update Profile-Schaltfläche

Durch den folgenden Code wird die Schaltfläche Update Profile definiert. Diese HTML-Anweisung steht vor dem VBScript-Abschnitt des Programms. Kopieren Sie den Code für dieses HTML-Steuerelement, und fügen Sie ihn direkt nach der Schaltfläche Clear ein.

<INPUT TYPE=BUTTON NAME="Update"     VALUE="Update Profile">

Durch das INPUT-Tag wird ein Element wie z. B. eine Schaltfläche, eine Optionsschaltfläche, ein Kontrollkästchen oder Text definiert. Durch den NAME-Parameter wird definiert, wie die Schaltfläche im Code genannt wird. Sie verwenden den TYPE-Parameter, um die Art des Formelements anzugeben; in diesem Fall ist dies eine Schaltfläche. Der VALUE-Parameter gibt die Beschriftung an, die mit der Schaltfläche verbunden ist (Update Profile).

Die Prozedur Update_OnClick

Durch Klicken auf die Schaltfläche Update Profile wird die VBScript-Prozedur Update_OnClick ausgelöst, die die Methoden SubmitChanges und Refresh des RDS.DataControl-Objekts (SControl) ausführt. Kopieren Sie diesen Code, und fügen Sie ihn zwischen die SCRIPT- und /SCRIPT-Tags ein.

Sub Update_OnClick
    SControl.SubmitChanges
    SControl.Refresh
End Sub

Wenn SControl.SubmitChanges ausgeführt wird, sammelt das Programm alle Aktualisierungsinformationen und sendet sie über HTTP an den Server. Die Aktualisierung erfolgt vollständig oder gar nicht; ist ein Teil der Aktualisierung nicht erfolgreich, wird keine der Änderungen durchgeführt und eine Statusmeldung zurückgegeben. SControl.Refresh muss nach SubmitChanges bei Remote Data Service nicht ausgeführt werden, auf diese Weise kann aber sichergestellt werden, dass die Daten aktualisiert worden sind.

Cancel Changes-Schaltfläche

Durch den folgenden Code wird die Schaltfläche Cancel Changes definiert. Diese HTML-Anweisung steht vor dem VBScript-Abschnitt des Programms. Kopieren Sie den Code für dieses HTML-Steuerelement, und fügen Sie ihn direkt nach der Schaltfläche Update ein.

<INPUT TYPE=BUTTON NAME="Cancel"     VALUE="Cancel Changes">

Die Prozedur Cancel_OnClick

Durch Klicken auf Cancel Changes wird die VBScript-Prozedur Cancel_OnClick ausgelöst, die die Methode CancelUpdate des RDS.DataControl-Objekts (SControl) ausführt. Kopieren Sie diesen Code, und fügen Sie ihn zwischen die SCRIPT- und /SCRIPT-Tags ein.

Sub Cancel_OnClick
      SControl.CancelUpdate
End Sub

Wenn SControl.CancelUpdate ausgeführt wird, werden alle Veränderungen verworfen, die der Benutzer an einem Angestelltendatensatz in der Datentabelle seit der letzten Abfrage oder Aktualisierung durchgeführt hat. Die ursprünglichen Werte werden wiederhergestellt.


Address Book-Datentabelle

Bei dem Tabellen-Steuerelement handelt es sich um ein Objekt, das wie eine Kakulationstabelle aufgebaut ist. Die Anwendung Address Book verwendet es, um die von Abfragen zurückgegebenen Daten anzuzeigen.

Durch den folgenden HTML-Code wird das Tabellen-Steuerelement definiert. Kopieren Sie diesen Code, und fügen Sie ihn direkt nach dem Kommentartag ein, das auf ihn verweist.

<OBJECT CLASSID="clsid:AC05DC80-7DF1-11d0-839E-00A024A94B3A"
    CODEBASE="http://<%=Request.ServerVariables("SERVER_NAME")%>/MSADC/Samples/ssdatb32.cab"
    ID=GRID1
DATASRC=#SControl
HEIGHT=125
WIDTH=495>
    <PARAM NAME="AllowAddNew" VALUE="TRUE">
    <PARAM NAME="AllowDelete" VALUE="TRUE">
    <PARAM NAME="AllowUpdate" VALUE="TRUE">
    <PARAM NAME="BackColor"   VALUE="-2147483643">
    <PARAM NAME="BackColorOdd"  VALUE="-2147483643">
    <PARAM NAME="ForeColorEven" VALUE="0">
</OBJECT>
<HR>

Durch das OBJECT-Tag wird die Tabellen-Steuerelement-Komponente für das Programm definiert. Das Tag enthält Parameter, mit denen Sie die Größe der Tabelle bestimmen, die angezeigten Daten nach Aktualisierungen und Löschungen verändern und die Anzahl der Zeilen gemäß den Ergebnissen einer Abfrage dynamisch verändern können. Durch die anderen Parameter werden die Farbeigenschaften für das Tabellen-Steuerelement festgelegt.

In der folgenden Tabelle sind die mit dem OBJECT-Tag verbundenen Parameter beschrieben.

Parameter | Beschreibung
CLASSID | Eine eindeutige, 128 Bit umfassende Zahl, durch die dem System die Art des eingebetteten Objekts angezeigt wird. Dieser Bezeichner wird in der Windows-Registrierung des lokalen Computers verwaltet. Er ist für dieses Sheridan-Tabellen-Steuerelement spezifisch.
CODEBASE | Gibt die Position einer Quelldatei des aufgerufenen Objekts an, wenn sich dieses nicht auf dem Clientcomputer befindet. In diesem Fall gibt CODEBASE den Ort einer .cab-Datei an, die die Sheridan ActiveX®-Steuerelemente enthält. Das Programm verwendet Active Server Pages-Skript (den Code, der zwischen den Zeichen <% und %> steht), um den Servernamen-Anteil des URL zu ermitteln.
ID | Definiert einen für das gesamte Dokument gültigen Bezeichner für das eingebettete Objekt.
DATASRC | Erkennt die Datenquelle, die zum Binden der Datentabelle an die Back-End-Daten (in diesem Fall SControl, ein RDS.DataControl-Objekt) verwendet wird.
WIDTH und HEIGHT | Gibt die Abmessungen des Steuerelements in Pixel an.

Bei der Anwendung Address Book verwendet das Tabellenobjekt verschiedene zusätzliche Parameter, um die Bearbeitung zu ermöglichen. Ohne diese Parameter kann die Tabelle die veränderbaren Daten nur in einer schreibgeschützten, statischen Ansicht anzeigen. In der folgenden Tabelle sind Einstellungen der Bearbeitungsparameter für das Tabellen-Steuerelement in dieser Beispielanwendung aufgelistet.

Parameter | Wert | Beschreibung
AllowAddNew | TRUE | Ermöglicht, dass in der Anzeige bereits vorhandener Daten neue Datensätze hinzugefügt werden können.
AllowDelete | TRUE | Ermöglicht, dass in der Anzeige bereits vorhandener Daten Datensätze entfernt werden können.
AllowUpdate | TRUE | Ermöglicht Änderungen in einer Zelle der Tabelle.

Durch die Parameter BackColor, BackColorEven und BackColorOdd erhält die Tabelle einen weißen Hintergrund und schwarzen Text.


Address Book-Navigationsschaltflächen

In der Anwendung Address Book werden die Navigationsschaltflächen unten auf der Webseite angezeigt. Sie können sich mit den Navigationsschaltflächen durch die Daten in der Tabellenanzeige bewegen, indem Sie entweder die erste oder letzte Datenzeile oder Zeilen markieren, die neben der aktuellen Auswahl liegen.

Durch den folgenden Code werden die Navigationsschaltflächen definiert. Diese HTML-Anweisungen stehen vor dem VBScript-Abschnitt des Programms. Kopieren Sie diese Steuerelemente, und fügen Sie sie direkt nach dem Kommentartag ein, das auf sie verweist.

<INPUT TYPE=BUTTON NAME="First"         VALUE="First">
<INPUT TYPE=BUTTON NAME="Prev"         VALUE="Previous">
<INPUT TYPE=BUTTON NAME="Next"        VALUE="Next">
<INPUT TYPE=BUTTON NAME="Last"        VALUE="Last">

HTML verwendet das INPUT-Tag, um ein Formelement wie z. B. eine Schaltfläche, Optionsschaltfläche, ein Kontrollkästchen oder Text zu definieren. Sie verwenden den TYPE-Parameter, um den Formelementtyp anzugeben, der in diesem Fall eine Schaltfläche ist. Durch den NAME-Parameter wird definiert, wie die Schaltfläche im Code genannt wird. Der VALUE-Parameter gibt die Beschriftungen an, die mit der Schaltfläche verbunden sind (First, Previous, Next und Last) und die auf der Seite angezeigt werden.

Wenn der Benutzer auf eine Schaltfläche klickt, wird ein Ereignis ausgelöst, und VBScript aktiviert die entsprechende Prozedur für diese Bewegung.

Prozeduren zum Bewegen durch Daten

Die Anwendung Address Book enthält verschiedene Prozeduren, mit denen der Benutzer auf die Schaltflächen First, Next, Previous und Last klicken kann, um sich durch die Daten zu bewegen. Um diese Bewegung zu ermöglichen, müssen Sie die Methode des RDS.DataControl-Objekts (SControl) für die Art der gewünschten Bewegung aufrufen. Die Methode ist für jede Navigationsschaltfläche unterschiedlich.

Durch Klicken auf die Schaltfläche First wird z. B. die VBScript-Prozedur First_OnClick aktiviert. Die Prozedur führt eine MoveFirst-Methode aus, wodurch die erste Datenzeile zur aktuellen Auswahl wird. Durch Klicken auf die Schaltfläche Last wird die Prozedur Last_OnClick aktiviert, die die MoveLast-Methode aufruft, mit der die letzte Datenzeile zur aktuellen Auswahl wird. Die anderen Navigationsschaltflächen funktionieren ähnlich. Kopieren Sie diesen Code, und fügen Sie ihn zwischen die SCRIPT- und /SCRIPT-Tags ein.

' Wechsel zum ersten Datensatz im gebundenen Recordset.
Sub First_OnClick
    SControl.Recordset.MoveFirst
End Sub

' Wechsel von der aktuellen Position zum nächsten Datensatz
' im gebundenen Recordset.
Sub Next_OnClick
    If SControl.Recordset.EOF Then    'Kann nicht weiter als zum letzten
    'Datensatz gehen.
        SControl.Recordset.MoveFirst
        SControl.Recordset.MoveNext
        Exit Sub
    End If

    SControl.Recordset.MoveNext

End Sub

' Geht von der aktuellen Position zum vorherigen Datensatz
' im gebundenen Recordset.
Sub Prev_OnClick
    If SControl.Recordset.BOF Then    'Kann nicht weiter als zum
    'ersten Datensatz gehen
        SControl.Recordset.MoveLast    'Aus BOF-Puffer hinaus bewegen
        SControl.Recordset.MovePrevious
        Exit Sub
    End If
    SControl.Recordset.MovePrevious

End Sub

'Geht zum letzten Datensatz im gebundenen Recordset.
Sub Last_OnClick
    SControl.Recordset.MoveLast
End Sub


VBScript-Initialisierungscode

Der VBScript-Abschnitt der Anwendung Address Book deklariert zunächst die Variable myQuery. Diese Variable enthält die SQL-Abfrage, die dynamisch aus dem Text der Suchfelder entsteht und an die Datenbank geschickt wird. Danach legt die Prozedur Find_OnClick den Wert dieser Variable fest.

Dim myQuery

Die restlichen Initialisierungen sind in der Prozedur Load enthalten. Dies schließt das Hinzufügen einer Überschrift in die Datentabelle ein. Durch die WHERE-Klausel werden keine Datensätze gelesen, sondern nur Spaltenüberschriften ermittelt. Kopieren Sie diesen Code, und fügen Sie ihn zwischen die SCRIPT- und /SCRIPT-Tags ein.

Sub Load
    Grid1.Caption = "Arcadia Bay Corporate Phone Directory"

    ' Datentabelle nur mit Spaltennamen initialisieren.
    SControl.SQL = "Select FirstName, LastName, Title, Email, " _
        & "Building, Room, Phone from Employee where 2 < 1"
    SControl.Refresh
End Sub


Address Book - Anwendungsquellcode

Es folgt der vollständige Quellcode für die Beispielanwendung Address Book.

<HTML>
<HEAD>
<TITLE>Corporate Address Book</TITLE>
</HEAD>

<!--
    Purpose:    To provide a company directory search service for Web users.
    Written By:    Microsoft Remote Data Service Team, Microsoft Corp.
    Date:    April, 1997
-->

<BODY BACKGROUND="Arcadia.gif" LANGUAGE="VBScript" onload="Load">
<tr>
    <td align="center" width="40%">
        <table border="2" cellpadding="7" cellspacing="7">
            <tr>
                <td width="100%"><font color="#160B5A"><font
                size="4"><strong>Arcadia Bay Corporate Phone
                Directory</strong></font></font></td>
            </tr>
        </table>
        </td>
</tr>

<hr>
<h2><font color = "#160B5A">Search Parameters</h2>
<h5><font color = "#160B5A">Please enter one or more search patterns and press FIND to search.</h5>

<FONT COLOR = "#160B5A"><B>

<PRE> First Name   <INPUT NAME=SFirst SIZE=30> </PRE>

<PRE> Last Name  <INPUT NAME=SLast  SIZE=30> </PRE>

<PRE> Title    <INPUT NAME=STitle SIZE=30> </PRE>

<PRE> E-mail Alias <INPUT NAME=SEmail SIZE=30> </PRE>

<!--
    Command button options:
    -----------------------
    Find        Submit a search request to the database.
    Clear        Clear the QBE fields (labor saving function only).
    Update Profile    Send updated "address profile" back to the database.
    Cancel Changes    Undo all changes since the last Update Profile.
-->

<INPUT TYPE=BUTTON NAME="Find"     VALUE="Find">
<INPUT TYPE=BUTTON NAME="Clear"     VALUE="Clear">
<INPUT TYPE=BUTTON NAME="Update"     VALUE="Update Profile">
<INPUT TYPE=BUTTON NAME="Cancel"     VALUE="Cancel Changes">

<hr>
<h2><font color = "#400040">Search Results</h2>
</B>
<br>

<!--
    This Sheridan DataGrid control (SGrid) is initialized to
    allow changes to the data - these changes will be saved
    to the database when the Update Profile button is pressed.
-->

<Object CLASSID="clsid:AC05DC80-7DF1-11d0-839E-00A024A94B3A"
    CODEBASE="http://<%=Request.ServerVariables("SERVER_NAME")%>/MSADC/Samples/ssdatb32.cab"
    ID=GRID1
    datasrc=#SControl
    HEIGHT=125
    WIDTH=495>
    <PARAM NAME="AllowAddNew" VALUE="TRUE">
    <PARAM NAME="AllowDelete" VALUE="TRUE">
    <PARAM NAME="AllowUpdate" VALUE="TRUE">
    <PARAM NAME="BackColor"   VALUE="-2147483643">
    <PARAM NAME="BackColorOdd"  VALUE="-2147483643">
    <PARAM NAME="ForeColorEven" VALUE="0">
</OBJECT>

<br>
<br>
<INPUT TYPE=BUTTON NAME="First"     VALUE="First">
<INPUT TYPE=BUTTON NAME="Prev"     VALUE="Previous">
<INPUT TYPE=BUTTON NAME="Next"    VALUE="Next">
<INPUT TYPE=BUTTON NAME="Last"    VALUE="Last">
<hr>

<!-- Non-visual controls - RDS.DataControl -->

<OBJECT classid="clsid:BD96C556-65A3-11D0-983A-00C04FC29E33"
    ID=SControl
    WIDTH=1 HEIGHT=1>
    <PARAM NAME="SERVER" VALUE="http://<%=Request.ServerVariables("SERVER_NAME")%>">
    <PARAM NAME="CONNECT" VALUE="dsn=ADCDemo;UID=ADCDemo;PWD=ADCDemo;">
</OBJECT>

<!-- VBS scripting for composing queries, updating profiles, and retrieving search results. -->

<SCRIPT LANGUAGE="VBScript">

Dim myQuery

Sub Load
    Grid1.CAPTION = "Arcadia Bay Corporate Phone Directory"

    'Initialize data grid with column names only.
    SControl.SQL = "Select FirstName, LastName, Title, Email, Building, Room, Phone from Employee where 2 < 1"
    SControl.Refresh

End Sub

'Implement "Clear" button - clears all of the QBE fields in preparation for a new "Find."

Sub Clear_OnClick
    SFirst.Value=""
    SLast.Value=""
    STitle.Value=""
    SEmail.Value=""
End Sub

'Implement "Find" button - composes a dynamic SQL query to be processed by the database and returns matching records to be bound to the SGrid object.

Sub Find_OnClick

    myQuery = "Select FirstName, LastName, Title, Type, Email, ManagerEmail, Building, Room, Phone from Employee"

    'Check QBE fields and compose a dynamic SQL query.

    IF (SFirst.Value <> "") THEN
        myQuery = myQuery + " where FirstName like '" + SFirst.Value + "%'"
    End IF

    IF (SLast.Value <> "") THEN
        myQuery = myQuery + " where LastName like '" + SLast.Value + "%'"
    End IF

    IF (STitle.Value <> "") THEN
        myQuery = myQuery + " where Title like '" + STitle.Value + "%'"
    End IF

    IF (SEmail.Value <> "") THEN
        myQuery = myQuery + " where Email like '" + SEmail.Value + "%'"
    End IF

    'Set the new query and then refresh the SControl so that the new results are displayed.

    SControl.SQL = myQuery
    SControl.Refresh

End Sub

'Navigation subroutines - based on currency changes to RDS.DataControl (SControl).

'Move to the first record in the bound recordset.

Sub First_OnClick
      SControl.Recordset.MoveFirst
End Sub

'Move to the next record from the current position in the bound recordset.

Sub Next_OnClick
    If SControl.Recordset.EOF Then    'cannot move beyond bottom record
        SControl.Recordset.MoveFirst
        SControl.Recordset.MoveNext
        Exit Sub
    End If

    SControl.Recordset.MoveNext

End Sub

'Move to the previous record from the current position in the bound recordset.

Sub Prev_OnClick
If SControl.Recordset.BOF Then    'cannot move beyond top record
        SControl.Recordset.MoveLast    'Get out of BOF buffer
        SControl.Recordset.MovePrevious
        Exit Sub
    End If
    SControl.Recordset.MovePrevious
End Sub

'Move to the last record in the bound recordset.

Sub Last_OnClick
      SControl.Recordset.MoveLast
End Sub

'Submit edits made and pull a clean copy of the new data.

Sub Update_OnClick
      SControl.SubmitChanges
    SControl.Refresh    ' A Refresh is not required in ADC 1.5 after a SubmitChanges, but it ensures fresh data.
End Sub

'Cancel edits and restore original values.

Sub Cancel_OnClick
      SControl.CancelUpdate
End Sub

</SCRIPT>

<BR>
<font color = "#400040">This site powered by Microsoft Remote Data Service. </font>
</BODY>
</HTML>


Beispielanwendungen für Remote Data Service

Remote Data Service umfasst einige Beispielanwendungen, die wertvolle Lernhilfen darstellen. In der Dokumentation sehen Sie Beispielcode und -anwendungen, die Programmiertechniken erläutern. Sie können beliebige Teile daraus kopieren, in Ihre eigenen Anwendungen einfügen und sie dann, falls erforderlich, verändern.

Remote Data Service stellt die folgenden Beispielanwendungen zur Verfügung, um zu verdeutlichen, wie diese Technologie zum Erstellen von Intranet- und Internetanwendungen genutzt wird. Wenn die Anwendungen bereits installiert sind, finden Sie die Beispiele in den in der folgenden Tabelle angegebenen Verzeichnissen. Müssen Sie die Anwendungen noch installieren, kann dies direkt von der MSDN™ CD-ROM aus geschehen.

Beispielanwendung | Pfad | Beschreibung
ADCTest | Installiert auf <Gerät>:\Program Files\Common Files\System\MSADC\ Samples\adctest.asp | Eine einfache .asp-Datei, mit der Sie die Installation von Remote Data Service überprüfen können.
Address Book | Installiert auf <Gerät>:\Program Files\Common Files\System\MSADC\ Samples\adctest.asp | Eine einfache Adressverwaltungssoftware für Unternehmen. Weitere Informationen über diese Anwendung finden Sie unter Address Book-Beispielanwendung.
Selector | Installiert auf <Gerät>:\Program Files\Common Files\System\MSADC\ Samples\adctest.asp | Zeigt, wie verschiedene Anwendungskonfigurationen von Remote Data Service auf der Clientebene, der mittleren Ebene und der Datenquellenebene implementiert werden. Anmerkung Selector kann auf Alpha-Plattformen nicht ausgeführt werden.

Diese Beispiele liegen im .asp-Format vor (der Name Ihres Hostservers wird automatisch eingesetzt), sie können jedoch auf einfache Weise verändert werden, so dass sie als .htm-Seiten angezeigt werden.

So verändern Sie die Beispiele, damit sie im .htm-Format angezeigt werden

  1. Öffnen Sie die .asp-Datei in einem Texteditor, wie z. B. Notepad.

  2. Ersetzen Sie die Zeichenfolge <%=Request.ServerVariables("SERVER_NAME")%> durch den Namen Ihres Webservers.

    Anmerkung Die in den Beispielen verwendeten Unternehmen, Namen und Daten sind immer fiktiv, wenn nicht ausdrücklich etwas anderes angegeben ist.

    Anmerkung Beim Installieren der Beispielanwendungen wird ein Konto namens adcdemo erstellt. Möglicherweise wird die Fehlermeldung "Anmeldung fehlgeschlagen" angezeigt, wenn Sie die Beispielanwendungen ausführen. Setzen Sie in diesem Fall Benutzernamen und -kennwort auf die Informationen des Testkontos zurück.


Entwicklungsanleitung zu Remote Data Service

Mit Remote Data Service (RDS) können Sie Daten verarbeitende Webanwendungen erstellen. RDS umfasst vorhandene Technologien wie ActiveX®; Microsoft® Internet Information Server (IIS); Microsoft® Visual Basic®, Scripting Edition; JScript™ und OLE DB. Es stellt zudem Innovationen vor, wie beispielsweise eine bessere Datenbindung für Webseiten, clientbasiertes Zwischenspeichern sowie die Möglichkeit, benutzerdefinierte Geschäftsobjekte aufzurufen.

In einer RDS-Anwendung werden viele miteinander verbundene Technologien verwendet. Die Entwicklungsanleitung beschreibt verschiedene Teile einer RDS-Anwendung über drei Ebenen und zeigt anhand von Codebeispielen, wie diese Technologien verwendet werden.

Dieser Abschnitt informiert über das folgende Thema:

  • Erklärung von Remote Data Service-Anwendungen

  • Entwickeln von Remote Data Service-Anwendungen

  • Problembehebung bei Remote Data Service


Erklärung von Remote Data Service-Anwendungen

In den folgenden Abschnitten werden die Architektur und die Komponenten der Remote Data Service-Technologie beschrieben. Es wird gezeigt, wie die client- und serverbasierten RDS-Komponenten zusammenarbeiten, um folgende Operationen durchzuführen:

  • Transportieren von Daten über das Internet oder ein Intranet zu Ihrer Webseite.

  • Zurücksenden der aktualisierten Daten über das Netzwerk und Zusammenführen in Ihrer Datenbank.

Dieser Abschnitt informiert über das folgende Thema:

  • Anwendungen mit drei Ebenen

  • Funktionsweise einer Remote Data Service-Anwendung

  • Verwandte Technologien


Anwendungen mit drei Ebenen

Wenn Sie die Remote Data Service-Technologie verwenden möchten, müssen Sie das dreistufige Client/Server-Modell verstehen. Dieses Modell trennt die verschiedenen Komponenten eines Client/Server-Systems in drei "Ebenen":

  • Clientebene — ein lokaler Computer, auf dem entweder ein Webbrowser eine Webseite anzeigt, in der Daten von einer Remotedatenquelle angezeigt und verändert werden können, oder (in nicht webbasierten Anwendungen) eine eigenständige kompilierte Front-End-Anwendung.

  • Mittlere Ebene — ein Microsoft® Windows NT® Servercomputer, auf dem sich die Komponenten mit den gekapselten Geschäftsregeln eines Unternehmens befinden. Komponenten der mittleren Ebene können entweder Active Server Page-Skripts sein, die über den Internet Information Server ausgeführt werden, oder (in nicht webbasierten Anwendungen) kompilierte ausführbare Dateien.

  • Datenquellenebene — ein Computer, auf dem sich ein Datenbank-Management-System (DBMS) wie z. B. eine Microsoft® SQL Server™-Datenbank befindet. (In einer zweistufigen Anwendung sind die mittlere Ebene und die Datenquellenebene miteinander kombiniert.)

Diese Ebenen müssen nicht den physischen Pfaden im Netzwerk entsprechen. Alle drei Ebenen können sich z. B. auf nur zwei Computern befinden. Der erste Computer kann ein Microsoft® Windows® 95-Computer mit Microsoft® Internet Explorer 4.0 als Browser sein. Der zweite Computer kann ein Windows NT-Server sein, auf dem sowohl Internet Information Server als auch Microsoft SQL Server ausgeführt wird. Wenn Sie Anwendungen auf diese Weise entwerfen, können Sie Prozesse und Daten im Netzwerk flexibler bereitstellen, wodurch die maximale Leistung erreicht und die Verwaltung vereinfacht wird.


Funktionsweise einer Remote Data Service-Anwendung

Wenn Sie eine Remote Data Service-Anwendung erstellen, können Sie die Anwendung in zwei oder drei logische Ebenen unterteilen. In der folgenden Abbildung wird gezeigt, wie eine webbasierte RDS-Anwendung eine Benutzeranfrage zum Anzeigen von Daten aus einer Datenbank behandelt. Die clientbasierten Komponenten befinden sich in der Regel in einem Internet Explorer-Browser und tauschen über HTTP mit den Serverkomponenten Daten aus. Internet Explorer 4.0 enthält bereits die RDS-Clientkomponenten, so dass die Bereitstellung für Sie vereinfacht wird.

Wenn eine Abfrage eingegeben wird, schicken die clientbasierten RDS-Komponenten die Abfrage an den Webserver. Die serverbasierten RDS-Komponenten verarbeiten die Anfrage und schicken sie an das DBMS. Das DBMS beantwortet die Anfrage und schickt die Daten zurück. Die RDS-Komponenten auf dem Webserver wandeln diese Daten in ein Recordset-Objekt von ADO um. Die Daten werden für den Transport zum Client konvertiert und über das Netzwerk an den Clientcomputer zurückgeschickt. Sie können in einem datenbezogenen Steuerelement, wie z. B. einem Textfeld- (Textbox) oder Tabellen-Steuerelement (Grid), angezeigt werden, das durch das RDS.DataControl-Objekt an die Daten gebunden ist. Ein einzelnes RDS.DataControl-Objekt kann Daten an viele datenbezogene Steuerelemente verteilen.

Diese Daten werden auf dem Clientcomputer zwischengespeichert, wodurch die Anzahl der Verbindungen zum Web verringert wird und der Benutzer die Daten einfacher bearbeiten kann. Der Weg zum Server ist nur für Aufrufe des Geschäftsobjekts erforderlich (z. B. für Aktualisierungen des Datenservers oder Abfragen neuer Daten).


Verwandte Technologien

Viele andere Technologien arbeiten mit Remote Data Service zusammen oder werden bei seiner Implementierung verwendet.

OLE DB Weitere Informationen über die Verwendung von OLE DB finden Sie auf der OLE DB-Webseite unter http://www.microsoft.com/data/.

Internet Information Server Weitere Informationen über Microsoft® Internet Information Server (IIS) oder Active Server Pages (ASP) finden Sie in der IIS-Website unter http://www.microsoft.com/germany/backoffice/infoserver/. Informationen zur Verwendung von Verbindungspools finden Sie unter:

  • Optionen von Verbindungspools

Microsoft Transaction Server Weitere Informationen über Microsoft® Transaction Server® finden Sie auf der MTS-Website unter http://www.microsoft.com/transaction/. Informationen über Geschäftsobjekte in Microsoft Transaction Server finden Sie unter:

  • Microsoft Transaction Server-Ressourcenverteiler

Microsoft SQL Server Weitere Informationen über Microsoft SQL Server finden Sie auf der SQL Server-Website unter http://www.microsoft.com/germany/backoffice/sql/. Weitere Informationen über die Verwendung von SQL Server mit RDS finden Sie unter:

  • Leistung und Stabilität mit Verbindungspools

  • Sicherstellen einer ausreichenden Größe von tempdb

  • Minimieren der Größe der Protokolldatei

Microsoft Internet Explorer Weitere Informationen über Microsoft Internet Explorer finden Sie auf der Internet Explorer-Webseite unter http://www.microsoft.com/ie_intl/ie/ und der Microsoft Internet Client SDK-Webseite unter http://www.microsoft.com/msdn/sdk/inetsdk/asetup/. Weitere Informationen über Datenbindung und gebundene Steuerelemente finden Sie unter:

  • Anzeigen von Daten über ein gebundenes Steuerelement

Microsoft Windows NT Server Weitere Informationen über Microsoft Windows NT Server und NT-Sicherheit finden Sie auf der NT-Webseite unter http://www.microsoft.com/ntserver/. Weitere Informationen über NT-Sicherheit und RDS finden Sie unter:

  • Sicherheit des Webservers


Optionen von Verbindungspools

Wenn Sie eine ODBC-Datenquelle verwenden, können Sie die Option für Verbindungspools in Internet Information Server (IIS) verwenden, um die Auslastung des Clients effektiv handhaben zu können. Verbindungspools stellen einen Ressourcen-Manager für Verbindungen dar, durch den häufig verwendete Verbindungen einen offenen Status behalten.

Wenn Sie Verbindungspools aktivieren möchten, lesen Sie bitte in der Internet Information Server-Dokumentation nach.

Beachten Sie, dass durch eine Aktivierung von Verbindungspools der Webserver unter Umständen in anderen Funktionen eingeschränkt wird, wie in der Microsoft Internet Information Server-Dokumentation erläutert.


Microsoft Transaction Server-Ressourcenverteiler

In einer dreistufigen Umgebung können Clients Datenbankverbindungen gemeinsam verwenden, wenn Sie Microsoft Transaction Server auf der mittleren Ebene einsetzen. Sie können das RDSServer.DataFactory-Objekt verwenden oder eine ActiveX-Komponenten-DLL erstellen, die ODBC-Verbindungen für Clients zum gemeinsamen Verwenden erstellen kann. Die Möglichkeit des gemeinsamen Verwendens ist dann von Bedeutung, wenn Sie das RDSServer.DataFactory-Objekt oder das benutzerdefinierte Geschäftsobjekt in der Laufzeitumgebung von Transaction Server ausführen. Anstatt tausende von Datenbankverbindungen zu verwenden, benötigen Sie nur einige hundert, obwohl weiterhin tausende von Clients unterstützt werden. Dies ist ein Feature des ODBC-Ressourcenverteilers in Microsoft Transaction Server.

Ausführen von Geschäftsobjekten in Microsoft Transaction Server

Geschäftsobjekte können ausführbare Dateien (.exe) oder Dynamic Link Libraries (.dll) sein. Die zum Ausführen des Geschäftsobjekts verwendete Konfiguration hängt davon ab, ob es sich bei dem Objekt um eine .dll- oder .exe-Datei handelt:

  • Geschäftsobjekte, die als .exe-Dateien erstellt wurden, können mit DCOM aufgerufen werden. Wenn diese Geschäftsobjekte mit Internet Information Server (IIS) verwendet werden, muss ein zusätzliches Marshaling der Daten stattfinden, wodurch die Clientleistung verringert wird.

  • Geschäftsobjekte, die als .dll-Dateien erstellt wurden, können über IIS (und damit auch über HTTP) verwendet werden und über DCOM nur mit Microsoft Transaction Server (MTS). Die DLLs von Geschäftsobjekten müssen auf dem IIS-Computer registriert sein, damit Sie über IIS darauf zugreifen können. Das RDSServer.DataFactory-Objekt ist eine DLL, die das standardmäßige Geschäftsobjekt von Remote Data Service darstellt, und für dieses Objekt gelten ebenfalls die in diesem Abschnitt genannten Bedingungen. (Weitere Informationen über die Schritte, die für die Konfiguration einer DLL zum Ausführen in DCOM erforderlich sind, finden Sie im Abschnitt "Ausführen einer DLL in DCOM".)

Wenn Sie das RDSServer.DataFactory-Objekt oder das benutzerdefinierte Geschäftsobjekt in der Laufzeitumgebung von MTS ausführen, können Sie die Leistung und Skalierbarkeit auch durch das Verwenden des MTS-Ressourcenverteilers stark verbessern. Da diese Geschäftsobjekte ADO aufrufen, wodurch wiederum indirekt ODBC aufgerufen wird, können Sie den MTS ODBC-Ressourcenverteiler nutzen.

Durch Ressourcenverteiler werden Ressourcen automatisch in einem Pool zusammengefasst und erneut verwendet. Wenn RDSServer.DataFactory oder ein benutzerdefiniertes Geschäftsobjekt eine Datenbankverbindung freigibt, wird die Verbindung in den Pool zurückgegeben. Wird die Methode zum Erstellen einer Verbindung erneut aufgerufen, wird dieselbe Datenbankverbindung angefordert. Anstatt eine neue Verbindung zu erstellen, verwendet der ODBC-Ressourcenverteiler den bestehenden Verbindungspool, wodurch Zeit und Serverressourcen eingespart werden.

Anmerkung Wenn Geschäftsobjekte auf der mittleren Ebene als Microsoft Transaction Server-Komponenten implementiert wurden (mit GetObjectContext, SetComplete und SetAbort), können diese mit Hilfe von Transaction Server-Kontextobjekten ihren Status über mehrere Clientaufrufe hinweg aufrechterhalten. Dies ist mit DCOM möglich, das in der Regel zwischen vertrauten Clients und Servern (einem Intranet) implementiert ist. In diesem Fall werden das RDS.DataSpace-Objekt und die CreateObject-Methode auf Seiten des Clients durch das Transaction Server-Kontextobjekt und die CreateInstance-Methode (verfügbar über die ITransactionContext-Schnittstelle) ersetzt, die durch Microsoft Transaction Server implementiert wurden.


Leistung und Stabilität mit Verbindungspools

Für stabile Verbindungspools und eine zusätzliche Leistungssteigerung sollten Sie Microsoft SQL Server so konfigurieren, dass die TCP/IP-Socket-Netzwerkbibliothek verwendet wird.

Gehen Sie dazu folgendermaßen vor:

  • Konfigurieren Sie den SQL Server-Computer für die Verwendung von TCP/IP-Sockets.

  • Konfigurieren Sie den Webserver für die Verwendung von TCP/IP-Sockets.

Konfigurieren des SQL Server-Computers für die Verwendung von TCP/IP-Sockets

Führen Sie auf dem SQL Server-Computer das Setup-Programm für SQL Server aus, so dass bei dem Datenaustausch mit der Datenquelle die TCP/IP-Socket-Netzwerkbibliothek verwendet wird.

So geben Sie die TCP/IP-Socket-Netzwerkbibliothek auf dem SQL Server-Computer an

  1. Zeigen Sie im Menü Start auf Programme und dann auf Microsoft SQL Server 6.5, und klicken Sie anschließend auf SQL-Setup.

  2. Klicken Sie zweimal auf Fortfahren. Das Dialogfeld Microsoft SQL Server 6.5—Optionen wird angezeigt.

  3. Wählen Sie Netzwerkunterstützung ändern aus, und klicken Sie dann auf Fortfahren.

  4. Stellen Sie sicher, dass das Kontrollkästchen TCP/IP-Sockets aktiviert ist, und klicken Sie auf OK.

  5. Klicken Sie auf Fortfahren, um den Vorgang zu beenden, und beenden Sie dann das Setup-Programm.

Konfigurieren des Webservers für die Verwendung von TCP/IP-Sockets

Bei der Konfiguration des Webservers für die Verwendung von TCP/IP-Sockets stehen zwei Optionen zur Verfügung. Ihre Vorgehensweise hängt davon ab, ob auf alle SQL-Server vom Webserver aus zugegriffen wird oder ob nur auf einen bestimmten SQL-Server vom Webserver aus zugegriffen wird.

Wird auf alle SQL-Server vom Webserver aus zugegriffen, müssen Sie das SQL Client-Konfigurations-Programm auf dem Webserver ausführen. Mit den folgenden Schritten ändern Sie die Voreinstellung für die Netzwerkbibliothek für alle SQL Server-Verbindungen, die von diesem IIS-Webserver hergestellt werden, in die TCP/IP-Sockets-Netzwerkbibliothek.

So konfigurieren Sie den Webserver (alle SQL-Server)

  1. Zeigen Sie im Menü Start auf Programme und dann auf Microsoft SQL Server 6.5, und klicken Sie anschließend auf SQL Client-Konfigurations-Programm.

  2. Wählen Sie die Registerkarte Net-Library aus.

  3. Klicken Sie im Feld Standardnetzwerk auf TCP/IP-Sockets.

  4. Klicken Sie auf Schließen, um die Änderungen zu speichern und das Dienstprogramm zu beenden.

Wird auf einen bestimmten SQL-Server von einen Webserver aus zugegriffen, müssen Sie das SQL Client-Konfigurations-Programm auf dem Webserver ausführen. Um die Netzwerkbibliothek für eine bestimmte SQL Server-Verbindung zu verändern, konfigurieren Sie die SQL Server-Clientsoftware auf dem Webserver folgendermaßen.

So konfigurieren Sie den Webserver (einen bestimmten SQL-Server)

  1. Zeigen Sie im Menü Start auf Programme und dann auf Microsoft SQL Server 6.5, und klicken Sie anschließend auf SQL Client-Konfigurations-Programm.

  2. Wählen Sie die Registerkarte Erweitern aus.

  3. Geben Sie in das Feld Server den Namen des Servers ein, zu dem mit TCP/IP-Sockets verbunden werden soll.

  4. Wählen Sie im Feld DLL-Name die Option TCP/IP-Sockets aus.

  5. Klicken Sie auf Hinzufügen/Ändern. Alle Datenquellen, die auf diesen Server zeigen, verwenden nun TCP/IP-Sockets.

  6. Klicken Sie auf Schließen.


Sicherstellen einer ausreichenden Größe von tempDB

Treten bei der Behandlung von Recordset-Objekten, die in SQL Server Speicherplatz für die Verarbeitung benötigen, Fehler auf, müssen Sie tempdb gegebenenfalls vergrößern. (Einige Abfragen erfordern temporären Speicherplatz für die Verarbeitung; für eine Abfrage mit einer ORDER BY-Klausel wird z. B. eine Sortierung des Recordset-Objekts benötigt, die temporären Speicherplatz erfordert.)

Wichtig Lesen Sie sich die Verfahrensanweisungen durch, bevor Sie mit Änderungen beginnen, da es nicht einfach ist, ein Medium wieder zu verkleinern, nachdem es vergrößert wurde.

So erweitern Sie die Größe von tempdb in SQL Server

  1. Starten Sie Microsoft® SQL Server Enterprise Manager, öffnen Sie den Baum für den Server und öffnen anschließend den Baum Datenbankmedien.

  2. Wählen Sie ein (physisches) Medium für die Erweiterung, z. B. master, und doppelklicken Sie auf das Medium, um das Dialogfeld Datenbankmedium bearbeiten zu öffnen.

    In diesem Dialogfeld wird angezeigt, wieviel Speicherplatz die aktuellen Datenbanken benötigen.

  3. Vergrößern Sie im Bildlauffeld Größe (MB) das Medium auf die gewünschte Größe (z. B. 50 Megabyte (MB) des Festplattenspeichers).

  4. Klicken Sie auf Jetzt ändern, um die Größe zu erhöhen, auf die die (logische) tempdb erweitert werden kann.

  5. Öffnen Sie den Baum Datenbanken auf dem Server, und doppelklicken Sie dann auf tempdb, um das Dialogfeld Datenbank bearbeiten zu öffnen. Auf der Registerkarte Datenbank wird die Größe angezeigt, die tempdb momentan zugewiesen ist (Datengröße). Die Voreinstellung ist 2 MB.

  6. Klicken Sie unter der Gruppe Größe (MB) auf Vergrößern. Die Diagramme zeigen den verfügbaren und zugewiesenen Speicherplatz auf den einzelnen physischen Medien an. Die Balken in Kastanienbraun stellen den verfügbaren Platz dar.

  7. Wählen Sie ein Protokollmedium (z. B. master) aus, um die verfügbare Größe im Feld Größe (MB) anzuzeigen.

  8. Klicken Sie auf Jetzt vergrößern, um der Datenbank tempdb diese Größe zuzuweisen.

    Im Dialogfeld Datenbank bearbeiten wird die neu zugewiesene Größe für tempdb angezeigt.

Siehe auch Weitere Informationen zu diesem Thema finden Sie in der Hilfedatei von Microsoft SQL Server Enterprise Manager unter "Dialogfeld Datenbank vergrößern".


Minimieren der Größe der Protokolldatei

Eine Protokolldatei füllt sich schnell (wodurch der Server aufgehalten wird), wenn zahlreiche Aktivitäten auf einer SQL Server-Datenbank durchgeführt werden. Sie können die Protokolldatei auf Protokoll bei Prüfpunkt abschneiden setzen, um die Lebensdauer der Protokolldatei für eine Datenbank erheblich zu verlängern.

So aktivieren Sie "Protokoll bei Prüfpunkt abschneiden"

  1. Führen Sie Microsoft SQL Server Enterprise Manager aus.

  2. Öffnen Sie den Baum für den Server.

  3. Öffnen Sie den Baum Datenbanken.

  4. Doppelklicken Sie auf den Namen der Datenbank, für die dieses Feature aktiviert werden soll.

  5. Klicken Sie auf der Registerkarte Datenbank auf Abschneiden.

  6. Klicken Sie auf der Registerkarte Optionen auf Protokoll bei Prüfpunkt abschneiden, und klicken Sie dann auf OK.

Siehe auch Weitere Informationen über das Feature Protokoll bei Prüfpunkt abschneiden finden Sie in der Dokumentation von Microsoft SQL Server.


Anzeigen von Daten über ein gebundenes Steuerelement

Datenbezogene Steuerelemente, über die auf Informationen in einer Datenbank zugegriffen wird, werden gebundene Steuerelemente genannt. Wenn ein Steuerelement an ein RDS.DataControl-Objekt gebunden ist, schickt Remote Data Service Feldwerte des aktuellen Datenbankdatensatzes an dieses Steuerelement. Das Steuerelement wiederum zeigt Ihnen Daten an und nimmt die von Ihnen vorgenommenen Änderungen an.

Mit Internet Explorer 4.0 können Sie Bindungen an einfache HTML-Steuerelemente erstellen. Weitere datenbezogene ActiveX-Steuerelemente stehen von Drittanbietern wie z. B. Sheridan zur Verfügung.

Bei der Datenbindung mit Internet Explorer 4.0 sind zwei Beziehungen wichtig: Quelle und Nutzer. Datennutzer geben eine Bindung durch einen Verweis auf die Datenquelle an, an die sie gebunden sind. Dazu geben Datennutzer (Steuerelemente wie Textfelder oder Tabellen) die Quelle und den Typ der gebundenen Daten an.

Die meisten gebundenen Steuerelemente sind durch die folgenden datenbezogenen Parameter des Tags <OBJECT> gekennzeichnet. Diese Parameter sind die in Internet Explorer 4.0 verfügbaren HTML-Erweiterungen für die Datenbindung.

Parameter | Beschreibung
DATASRC | Kennzeichnet die Datenquelle (RDS.DataControl-Objekt) für die Datenbindung.
DATAFLD | Kennzeichnet eine Spalte eines Datasets.
DATAFORMATAS | (Optional) Kennzeichnet den Typ der gebundenen Daten.

Ein Feld kann mehrere gebundene Steuerelemente haben, Sie müssen jedoch nicht für jedes Feld in der Tabelle ein gebundenes Steuerelement zur Verfügung stellen.

Wenn Sie auf das Front-End der Webseite zugreifen, arbeitet RDS.DataControl mit der Datenbank zusammen, um ein Recordset zu erstellen, über das Daten verarbeitet werden können. Anschließend können Sie sich mit Schaltflächen, die die Methoden MoveFirst, MoveLast, MoveNext und MovePrevious des RDS.DataControl-Objekts aufrufen, durch das Recordset bewegen. Mit der SubmitChanges-Methode des RDS.DataControl-Objekts können Sie auch Aktualisierungen an die Datenbank senden.


Sicherheit des Webservers

Wenn Sie das RDSServer.DataFactory-Objekt auf Ihrem Internetwebserver verwenden, sollten Sie das potenzielle Sicherheitsrisiko beachten. Externe Benutzer können unter Verwendung eines gültigen Datenquellennamens (DSN), einer Benutzer-ID und eines Kennwortes Web-Seiten erstellen, mit denen sie beliebige Abfrage an die Datenquelle senden können. Wenn Sie den Zugriff auf eine Datenquelle weiter einschränken möchten, können Sie das RDSServer.DataFactory-Objekt (msadcf.dll) aus der Registrierung entfernen und von der Festplatte löschen und stattdessen benutzerdefinierte Geschäftsobjekte mit hartkodierten Abfragen verwenden. Im nächsten Abschnitt wird dieses Verfahren näher erläutert.

Clientpersonifizierung und Sicherheit

Wenn die Password Authentication-Eigenschaft für den IIS-Webserver auf "Windows NT-Herausforderung/Rückmeldung" gesetzt ist, werden die Geschäftsobjekte im Sicherheitskontext des Clients aufgerufen. Hierbei handelt es sich um ein neues Feature in RDS 1.5, mit dem eine Clientpersonifizierung (Client Impersonation) über HTTP möglich ist. Beim Verwenden dieses Modus ist die Anmeldung beim Webserver (IIS) nicht anonym, sondern es werden die Benutzer-ID und das Kennwort des Clientcomputers verwendet. Sind die ODBC-DSNs so eingerichtet, dass Vertraute Verbindung verwendet wird, dann wird auf Datenbanken wie SQL Server ebenfalls im Sicherheitskontext des Clients zugegriffen. Dies funktioniert jedoch nur, wenn sich die Datenbank auf demselben Computer befindet wie IIS; die Benutzerangaben des Clients können nicht auf einen anderen Computer übertragen werden.

Ein Client, Hans Müller, mit der Benutzer-ID ="HansM" und dem Kennwort "Geheimnis" ist z. B. bei einem Clientcomputer angemeldet. Er führt eine browserbasierte Anwendung aus, die auf das RDSServer.DataFactory-Objekt zugreifen muss, um ein ADOR.Recordset durch Ausführen einer SQL-Abfrage auf dem Computer "Server" zu erstellen, auf dem IIS ausgeführt wird. Der Server ist so eingerichtet, dass "Windows NT-Herausforderung/Rückmeldung" zur Kennwortauthentifizierung verwendet wird, bei seinem ODBC-DSN ist Vertraute Verbindung verwenden aktiviert, und die SQL Server-Datenquelle befindet sich ebenfalls auf dem Server. Wenn der Webserver eine Anfrage empfängt, wird der Client nach der Benutzer-ID und dem Kennwort gefragt. Daher wird die Anfrage beim Server so protokolliert, als ob sie von "HansM"/"Geheimnis" anstatt von IUSER_MyServer stammt (dies ist die Voreinstellung, wenn die anonyme Kennwortauthentifizierung aktiviert ist). Bei der Anmeldung bei SQL Server wird ebenfalls "HansM"/"Geheimnis" verwendet.

Dies bedeutet, dass der Authentifizierungsmodus "NT-Herausforderung/Rückmeldung" von IIS das Erstellen von HTML-Seiten ermöglicht, ohne dass der Benutzer explizit zur Eingabe der Benutzer-ID und des Kennwortes aufgefordert wird, die zur Anmeldung bei der Datenbank erforderlich sind. Wenn die Standardauthentifizierung von IIS verwendet würde, wäre dies ebenfalls erforderlich.

Kennwortauthentifizierung

RDS kann mit einem IIS-Webserver Daten austauschen, unabhängig davon, welcher der drei Modi zur Kennwortauthentifizierung verwendet wird: Anonym, Standard oder NT-Herausforderung/Rückmeldung. Durch diese Einstellungen wird definiert, wie der Webserver den Zugriff überprüft, z. B. kann es erforderlich sein, dass der Clientcomputer explizit Zugriffsrechte auf den NT-Webserver hat.


Entwickeln von Remote Data Service-Anwendungen

Wenn Sie eine webbasierte Anwendung mit Datenzugriff programmieren, sollten Sie verstehen, wie die entsprechenden unterschiedlichen Komponenten interagieren, um die verschiedenen Features der Remote Data Services, wie Datenbindung und Remote-Zugriff, verwenden zu können.

In dem vorangegangenen Abschnitt Erklärung zu Remote Data Service-Anwendungen wurde die Architektur einer RDS-Anwendung über drei Ebenen vorgestellt, und es wurde erklärt, wie die client- und serverbasierten Komponenten miteinander kommunizieren, um Daten zwischen Clients und Servern auszutauschen.

Dieser Abschnitt informiert über das folgende Thema:

  • Übertragen eines Recordset-Objekts an den Client

  • Übertragen aktualisierter Recordset-Objekte an die mittlere Ebene

  • Definieren eines Recordset-Objekts

    Anmerkung Fügen Sie die ganzen Codebeispiele in Ihren Codeeditor ein. Anderenfalls wird das Beispiel möglicherweise nicht ordnungsgemäß ausgeführt, wenn nur Teile der Beispiele verwendet werden oder die Absatzformatierung verloren geht.


Übertragen eines Recordset-Objekts an den Client

Es gibt drei Möglichkeiten, ein Recordset-Objekt mit RDS vom Server zurück an den Client zu übertragen. Sie können:

  • RDS.DataControl-Methoden und -Eigenschaften verwenden, die das RDSServer.DataFactory-Objekt automatisch aufrufen.

  • Das RDSServer.DataFactory-Objekt manuell aufrufen.

  • Eine benutzerdefinierte ActiveX-DLL zum Ausführen von Datenzugriffsfunktionen erstellen.

In diesem Abschnitt wird das Übertragen von Recordset-Objekten mit diesen Methoden erklärt.


Übertragen eines Recordset-Objekts mit dem DataControl-Objekt

Sie können ein nicht verbundenes Recordset-Objekt öffnen, indem Sie die Connect-, Server- und SQL-Eigenschaften des RDS.DataControl-Objekts festlegen.

Der folgende Code zeigt, wie Sie diese Eigenschaften während der Entwurfszeit festlegen:

<OBJECT CLASSID="clsid:BD96C556-65A3-11D0-983A-00C04FC29E33" ID="ADC1">
    <PARAM NAME="SQL" VALUE="Select * from Products">
    <PARAM NAME="Connect" VALUE="DSN=AdvWorks;">
    <PARAM NAME="Server" VALUE="http://SalesWeb/">
</OBJECT>

Wenn Sie die Refresh-Methode aufrufen, nachdem Sie diese Eigenschaften für das RDS.DataControl-Objekt festgelegt haben, wird automatisch das RDSServer.DataFactory-Objekt "im Hintergrund" aufgerufen, und Remote Data Service gibt ein Recordset-Objekt an den Client zurück. Sie müssen keinen Code schreiben, um das RDSServer.DataFactory-Objekt zu verwenden. Wenn Sie dies jedoch möchten, finden Sie weitere Informationen unter "Übertragen eines Recordset-Objekts mit dem RDSServer.DataFactory-Objekt".


Übertragen eines Recordset-Objekts mit dem DataFactory-Objekt

Remote Data Service enthält ein serverbasiertes Geschäftsobjekt (ActiveX®-DLL) mit dem Namen RDSServer.DataFactory, das Befehle an eine Datenquelle schickt und die Ergebnisse über das Internet oder ein Intranet zurückgibt. RDSServer.DataFactory ist die standardmäßige ActiveX-DLL, mit der Sie ohne großen Programmieraufwand aktuelle Daten auf Ihrer Webseite zur Verfügung stellen können.

Im folgenden Beispiel wird erläutert, wie das RDSServer.DataFactory-Objekt von einer VBScript-Webseite aufgerufen wird. Sie erstellen mit dem RDS.DataSpace-Objekt auf dem Client eine Instanz des RDSServer.DataFactory-Objekts auf dem Server.

<HTML>
<HEAD></HEAD>
<BODY>

<!-- RDS.DataControl -->
<OBJECT classid="clsid:BD96C556-65A3-11D0-983A-00C04FC29E33" ID=ADC1>
</OBJECT>
<!-- RDS.DataSpace -->
<OBJECT ID="ADS1" WIDTH=1 HEIGHT=1
  CLASSID="CLSID:BD96C556-65A3-11D0-983A-00C04FC29E36">
</OBJECT>
.
.
.
<SCRIPT LANGUAGE="VBScript">
Option Explicit
Sub Window_OnLoad()
  Dim ADF1, myRS
  Set ADF1 = ADS1.CreateObject("RDSServer.DataFactory", _
  "http://<%=Request.ServerVariables("SERVER_NAME")%>")
  Set myRS = _
  ADF1.Query("DSN=pubs;UID=sa;PWD=permission;", _
  "Select * From Authors")
  ' Zuweisen des zurückgegebenen Recordset-Objekts zu SourceRecordset.
  ADC1.SourceRecordset = myRS
End Sub
</SCRIPT>
</BODY>
</HTML>


Übertragen eines Recordset-Objekts mit einem benutzerdefinierten Geschäftsobjekt

Wenn Sie das RDSServer.DataFactory-Objekt nicht zum Übertragen von Recordset-Objekten zum Client verwenden möchten, können Sie ein benutzerdefiniertes Geschäftsobjekt erstellen, das auf dem Server ausgeführt wird. Die DLL (Dynamic Link Library) kann ein allgemeines Automatisierungsobjekt sein, das mit Microsoft®Visual Basic®, Microsoft®Visual C++® usw. erstellt wurde, oder eine serverbasierte HTML-Seite mit Active Server Pages-Skriptcode. Clients und webbasierte Frontend-Anwendungen rufen die Geschäftsobjekte auf, die besondere Funktionen erfüllen. Die Geschäftsobjekte der mittleren Ebene können dann wiederum mit Backend-Datenbanken Daten austauschen.

Die benutzerdefinierten DLLs können auch Methoden enthalten, die in der einfachen ActiveX-DLL von RDSServer.DataFactory nicht zur Verfügung stehen. Diese Methoden müssen sich nicht auf den Datenzugriff beschränken - sie können auch einfach eine Geschäftsregel umfassen.

Dieser Abschnitt informiert über das folgende Thema:

  • Schreiben von Code für das Übertragen von Recordset-Objekten mit einer benutzerdefinierten ActiveX-DLL


Schreiben von Code für das Übertragen von Recordset-Objekten mit einer benutzerdefinierten ActiveX-DLL

Der folgende Clientcode von Microsoft®Visual Basic®, Scripting Edition, führt dieselbe Aktion wie der previous RDSServer.DataFactory code aus, er verwendet jedoch ein benutzerdefiniertes Geschäftsobjekt. Auch hier wird das RDS.DataSpace-Objekt auf dem Client zum Erstellen einer Instanz des Geschäftsobjekts (in diesem Fall MyCustomBusinessObject) auf dem Server verwendet.

<HTML>
<HEAD></HEAD>
<BODY>

<!-- RDS.DataControl -->
<OBJECT classid="clsid:BD96C556-65A3-11D0-983A-00C04FC29E33" ID=ADC1>
</OBJECT>
<!-- RDS.DataSpace -->
<OBJECT ID="ADS1" WIDTH=1 HEIGHT=1
  CLASSID="CLSID:BD96C556-65A3-11D0-983A-00C04FC29E36">
</OBJECT>
.
.
.
<SCRIPT LANGUAGE="VBScript">
Option Explicit
Sub GetRecords()
  Dim objMyCustomBusinessObject, myRS
  Set objMyCustomBusinessObject = _
  ADS1.CreateObject("MyCustomBusinessObject", _
  "http://<%=Request.ServerVariables("SERVER_NAME")%>")
  ' Vorausgesetzt, MyCustomBusinessObject hat eine Methode mit dem
  ' Namen GetData, die eine Verbindungszeichenfolge und
  ' SQL-Parameter erwartet.
  Set myRS = _
  objCustomBusinessObject.GetData _
  ("DSN=pubs;UID=sa;PWD=permission;", _
  "Select * From Authors")
  ' Zuweisen des zurückgegebenen Recordset-Objekts zu SourceRecordset.
  ADC1.SourceRecordset = myRS
End Sub
</SCRIPT>
</BODY>
</HTML>

Angenommen, Sie erstellen die ActiveX-DLL von MyCustomBusinessObject, das sich auf der mittleren Ebene befindet, mit Visual Basic. Der Code in der GetData-Methode der MyCustomBusinessObject-Klasse könnte dann folgendermaßen aussehen. Beachten Sie, dass Sie ActiveX® Data Objects (ADO) direkt verwenden können.

' Gibt ein ADO-Resultset zurück.
Public Function GetData(szCnStr As String, szSQL _
  As String) As Object

  Dim cn As New ADODB.Connection
  Dim rs As New ADODB.Recordset

  cn.Open szCnStr
  ' ADODB.Recordset sollte Recordset-Objekte erstellen,
  ' die getrennt und später wieder
  ' verbunden werden können, um Stapelaktualisierungen zu verarbeiten.
  rs.CursorLocation = adUseClientBatch
  ' Mit der Verwendung der Unspecified-Parameter
  ' wird ein ADO/R-Recordset zurückgegeben.
  rs.Open szSQL, cn, _
  adOpenUnspecified, adLockUnspecified, _
  adCmdUnspecified
  Set GetData = rs
End Function

Tipps

  • Platzieren Sie zum Testen der grundsätzlichen Funktionalität immer erst eine einfache Methode in der Serverkomponente, bevor Sie versuchen, Recordset-Objekte zu übergeben.

  • Erstellen Sie zum Testen der Serverkomponente zunächst eine einfache Clientanwendung, bevor Sie sie bereitstellen und mit Internet Explorer testen.

  • Es ist einfacher, die Anwendung probeweise auf einem lokalen Test-Webserver zu entwickeln. Sie müssen die DLL nach jedem Kompilieren auf den Testserver kopieren und dort registrieren.

  • Der an das Geschäftsobjekt übergebene DSN muss ein System-DSN auf dem Server sein. Ist er nicht vorhanden oder falsch eingerichtet, scheitert die Komponente. Sie können den DSN mit einer anderen ODBC-Anwendung (wie z. B. MSQuery) auf dem Server testen, um sicherzustellen, dass der DSN richtig eingerichtet ist.

  • Die Namen von Methoden dürfen bei benutzerdefinierten Geschäftsobjekten nicht mehr als 255 Zeichen umfassen. Dadurch ist die Kompatibilität für alle von RDS unterstützten Protokolle (HTTP, HTTPS, DCOM und prozessinterne Ausführung) gewährleistet.

  • Wenn Sie ein benutzerdefiniertes Geschäftsobjekt mit Visual Basic erstellt haben, das das Auflösen zur Kompilierungszeit mit der Klassenbibliothek von ADOR 1.0 verwendet, müssen Sie das benutzerdefinierte Geschäftsobjekt neu erstellen, so dass es die Klassenbibliothek von ADOR 2.0 verwendet.


Übertragen aktualisierter Recordset-Objekte an die mittlere Ebene

Sie können aktualisierte Recordset-Objekte vom Clientcomputer an die mittlere Ebene und den Datenbankserver übergeben, indem Sie Folgendes verwenden:

  • Das RDS.DataControl-Objekt.

  • ADO mit einem benutzerdefinierten Geschäftsobjekt auf der mittleren Ebene.


Verwenden von DataControl zum Übertragen aktualisierter getrennter Recordset-Objekte an die mittlere Ebene

Mit datengebundenen Steuerelementen können Datensätze grafisch bearbeitet, hinzugefügt oder gelöscht werden. Alle vom Benutzer eingegebenen Änderungen werden lokal gespeichert, bis der Benutzer die Aktualisierung explizit übernimmt oder abbricht.

In der Regel binden Sie ein Tabellen-Steuerelement (Grid) an ein RDS.DataControl-Objekt, und anschließend können Sie Datensätze im clientbasierten Recordset-Objekt über die Benutzeroberfläche hinzufügen, bearbeiten und löschen. Nachdem Sie die clientbasierten Daten aktualisiert haben, müssen Sie die geänderten Daten in der Datenbank speichern, indem Sie die SubmitChanges-Methode des RDS.DataControl-Objekts verwenden. Mit der SubmitChanges-Methode werden anstehende Änderungen des lokal zwischengespeicherten, aktualisierbaren Recordset-Objekts an die OLE DB-Datenquelle übergeben, die in der Connect-Eigenschaft des RDS.DataControl-Objekts angegeben ist.

Im folgenden Codebeispiel wird dies gezeigt:

Sub Update_OnClick
    ADC1.SubmitChanges
End Sub

Nur die geänderten Datensätze werden zur Bearbeitung übergeben. Entweder werden alle Änderungen erfolgreich durchgeführt oder alle Änderungen schlagen fehl.

Sie können auch eine Schaltfläche zum Abbrechen dieses Vorgangs einfügen, um die Änderungen am Recordset-Objekt abzubrechen:

Sub Cancel_OnClick
    ADC1.CancelUpdate
End Sub

Anmerkungen

  • Die Eigenschaften Connect, Server und SQL müssen festgelegt sein, bevor Sie die SubmitChanges-Methode mit dem RDS.DataControl-Objekt verwenden können. Diese Eigenschaften werden zum erneuten Verbinden mit der Datenquelle verwendet.

  • Wenn Sie die CancelUpdate-Methode aufrufen, nachdem Sie SubmitChanges für dasselbe Recordset-Objekt aufgerufen haben, scheitert der Aufruf von CancelUpdate, da die Änderungen bereits durchgeführt wurden.


Verwenden von ADO zum Übertragen von Recordset-Objekten an die mittlere Ebene

Sie können das ADOR.Recordset-Objekt zum Marshaling von Recordset-Objekten von einer Clientwebseite zu einem Geschäftsobjekt der mittleren Ebene verwenden. Nehmen wir z. B. an, ein Benutzer stellt eine Verbindung zu einem virtuellen Kaufhaus her und wählt eine Reihe von Artikeln zum Kauf aus. Die ausgewählten Artikel werden in dem virtuellen Einkaufswagen angezeigt, der mit dem RDS.DataControl-Objekt implementiert und in einem Rowset zwischengespeichert ist. Klickt der Kunde auf die Schaltfläche für das Kaufen, wird ein ADOR.Recordset-Objekt erstellt und an einen Anwendungsserver als Eingabeparameter einer Geschäftsfunktion (ApplyUpdates) übergeben. Dadurch wird ein Marshaling für das Recordset-Objekt zum Server durchgeführt. Die ApplyUpdates-Geschäftsfunktion stellt dann eine Verbindung zur Vertriebsdatenbank her und führt die Aktualisierung durch.

' Code auf einer Clientwebseite.
Sub PurchaseItem_OnClick
    Set rst = ADC1.Recordset

' Mit der folgenden Option sendet das Recordset nur dann
' veränderte Datensätze zurück, wenn es sich um Aktualisierungen handelt. Hierdurch wird die Datenübertragung.
' leichter.
    rst.MarshalOptions = adMarshalModifiedOnly

' Aufrufen der ApplyUpdates-Funktion des Geschäftsobjekts
' MyObj und Übergeben des ADOR.Recordset-Objekts
' als Eingabeparameter.
    MyObj.ApplyUpdates rst

End Sub

' VB-Code im Geschäftsobjekt
' ApplyUpdates ist eine Methode in einem
' Geschäftsobjekt der mittleren Ebene.
Sub ApplyUpdates(rst As ADOR.Recordset)

    rst.ActiveConnection =  _
        "DSN=SalesDB;UID=SMgr;PWD=password"

' Speichern der geänderten Datensätze.
    rst.UpdateBatch

End Sub


Definieren eines Recordset-Objekts

Sie können ein ADODB.Recordset-Objekt erstellen und die Spalteninformationen angeben. Anschließend können Sie Daten in das Recordset-Objekt eingeben; durch das zugrunde liegende Rowset werden die Eingaben zwischengespeichert.

In dem folgenden Codebeispiel wird gezeigt, wie ein Recordset-Objekt mit dem RDSServer.DataFactory-Objekt definiert wird. Sie können hierzu auch das RDS.DataControl-Objekt verwenden.

Sub RsDefineShape()

    Dim vntRecordShape(3)
    Dim vntField1Shape(3)
    Dim vntField2Shape(3)
    Dim vntField3Shape(3)
    Dim vntField4Shape(3)

    ' Angeben des Namens,
    ' Typs, der Größe und der Nullfähigkeit für jedes Feld.

    vntField1Shape(0) = "Name"    ' Spaltenname.
    vntField1Shape(1) = CInt(129)    ' Spaltentyp.
    vntField1Shape(2) = CInt(40)    ' Spaltengröße.
    vntField1Shape(3) = False        ' Nullfähigkeit

    vntField2Shape(0) = "Age"
    vntField2Shape (1) = CInt(3)
    vntField2Shape (2) = CInt(-1)
    vntField2Shape (3) = True

    vntField3Shape (0) = "DateOfBirth"
    vntField3Shape (1) = CInt(7)
    vntField3Shape (2) = CInt(-1)
    vntField3Shape (3) = True

    vntField4Shape (0) = "Balance"
    vntField4Shape (1) = CInt(6)
    vntField4Shape (2) = CInt(-1)
    vntField4Shape (3) = True

    ' Zusammenstellen aller Felder in einem Array des Typs Array.
    vntRecordShape(0) = vntField1Shape
    vntRecordShape(1) = vntField2Shape
    vntRecordShape(2) = vntField3Shape
    vntRecordShape(3) = vntField4Shape

    ' Erstellen eines leeren Recordset-Objekts
    ' mit RDSServer.DataFactory. ' Es wird ein Array des Typs Variant verwendet, in dem
    ' jedes Element selbst ein anderes Array des
    ' Typs Variant ist, wobei ein Array jeweils
    ' zu einer im Recordset erforderlichen Spalte gehört.
    ' Die Elemente für das innere Array sind der Name,
    ' Typ, die Größe und Nullfähigkeit der Spalte.

    Dim NewRs

    ' Sie können auch das RDS.DataControl-Objekt
    ' an Stelle des RDSServer.DataFactory-Objekts verwenden. In
    ' diesem Fall wäre der folgende Code Set NewRS
    ' = ADC1.CreateRecordset(vntRecordShape)
    Set NewRS = ADF.CreateRecordset(vntRecordShape)

    Dim fields(3)
    fields(0) = vntField1Shape(0)
    fields(1) = vntField2Shape (0)
    fields(2) = vntField3Shape (0)
    fields(3) = vntField4Shape (0)

    ' Auffüllen des neuen Recordset-Objekts mit Datenwerten.
    Dim fieldVals(3)

    ' Verwenden von AddNew zum Hinzufügen der Datensätze.
    fieldVals(0) = "Joe"
    fieldVals(1) = 5
    fieldVals(2) = CDate(#1/5/96#)
    fieldVals(3) = 123,456
    NewRS.AddNew fields, fieldVals

    fieldVals(0) = "Mary"
    fieldVals(1) = 6
    fieldVals(2) = CDate(#6/5/96#)
    fieldVals(3) = 31
    NewRS.AddNew fields, fieldVals

    fieldVals(0) = "Alex"
    fieldVals(1) = 13
    fieldVals(2) = CDate(#1/6/96#)
    fieldVals(3) = 34,0001
    NewRS.AddNew fields, fieldVals

    fieldVals(0) = "Susan"
    fieldVals(1) = 13
    fieldVals(2) = CDate(#8/6/96#)
    fieldVals(3) = 0.0
    NewRS.AddNew fields, fieldVals

    NewRS.MoveFirst

    ' Setzen des neu erstellten und gefüllten Recordset-Objekts auf
    ' die SourceRecordset-Eigenschaft von
    ' RDS.DataControl zum Binden an grafische Steuerelemente
    Set ADC1.SourceRecordset = NewRS

End Sub


Problembehandlung bei Remote Data Service

In den folgenden Abschnitten wird beschrieben, wie Sie bestimmte Fehler umgehen können.

  • "Internetserverfehler: Zugriff verweigert"

  • Meldung "Unerwarteter Fehler" beim Ausführen der Beispielanwendungen

  • Verwenden des RDS.DataControl-Objekts mit dem Kombinationsfeld-Steuerelement von Sheridan

  • Gegenseitiges Sperren mit Isolationsstufe "Read Repeatable"

  • RDS.DataControl-Objekt und mehrere Recordset-Anforderungen

  • Überholte Klassenbezeichner


"Internetserverfehler: Zugriff verweigert"

Wenn Sie diesen Fehler erhalten, hat Microsoft® Internet Information Server (IIS) in der Regel folgenden Status zurückgegeben:

HTTP_STATUS_DENIED 401.

Stellen Sie sicher, dass für die Verzeichnisse, auf die IIS zugegriffen hat, die entsprechenden Rechte vorhanden sind. RDS 1.5 kann mit einem IIS-Webserver Daten austauschen, der in einem der drei folgenden Modi zur Kennwortauthentifizierung ausgeführt wird: Anonym, Standard oder NT-Herausforderung/Rückmeldung. Anders als bei den vorherigen Versionen ist die Einstellung Anonyme Anmeldung erlauben nicht mehr erforderlich. Der Webserver muss darüber hinaus auch über Berechtigungen für den Datenquellencomputer verfügen, wenn es sich dabei um einen Windows NT®-Computer handelt.


Meldung "Unerwarteter Fehler" beim Ausführen der Beispielanwendungen

Checkliste für den Server

  • Wenn Sie IIS erneut installieren, müssen Sie anschließend auch Remote Data Service neu installieren.

  • Wenn Sie Microsoft SQL Server als Back-End-Datenquelle verwenden, nehmen Sie Microsoft SQL Server 6.5, Service Pack 2 oder höher.

  • Stellen Sie sicher, dass es sich bei den ODBC-DSNs um System-DSNs und nicht um Benutzer-DSNs handelt. Nach der anonymen Anmeldung eines Benutzers bei IIS können nur System-DSNs angezeigt werden.

  • Überprüfen Sie, ob das von Ihrem WWW-Dienst verwendete anonyme Konto ein Benutzer Ihrer Domäne ist, der über NTFS-Berechtigungen für alle relevanten Server und Verzeichnisse verfügt. Überprüfen Sie schließlich, ob das Kennwort für dieses anonyme Konto nicht abgelaufen ist.

  • Da Remote Data Service im Verzeichnis C:\Program Files\Common Files\System\MSADC installiert ist, müssen Sie überprüfen, ob der anonyme Benutzer vom IIS Service Manager aus auf dieses Verzeichnis zugreifen kann. Er sollte sowohl Lese- als auch Ausführzugriff haben.

  • Wenn Sie Probleme mit Remote Data Service-DLLs und -Beispielanwendungen haben, registrieren Sie die DLLs mit der Regsvr32.exe neu.

  • Wenn Sie eigene Geschäftsobjekte schreiben, speichern Sie die Active Server Pages-Skriptdateien (.asp) in einem Verzeichnis, in dem anonyme Benutzer (in IIS) Ausführen-Rechte haben.


Verwenden des DataControl-Objekts mit dem Kombinationsfeld-Steuerelement von Sheridan

Das Kombinationsfeld-Steuerelement (ComboBox) von Sheridan hat zwei Eigenschaften, die an RDS.DataControl-Daten gebunden werden können. Durch die Bindung des Kombinationsfeld-Steuerelements an RDS.DataControl erfolgt kein automatisches Füllen des "Text"-Bereichs. Die Text-Eigenschaft, die das aktuell ausgewählte Element anzeigt, kann nicht gebunden werden. Dadurch kann es passieren, dass nach dem Aufruf der Refresh-Methode immer noch alte Daten angezeigt werden.

Dies können Sie mit einem Code umgehen, der einer der folgenden beiden Unterprozeduren in Microsoft® Visual Basic®, Scripting Edition, entspricht. Durch beide Prozeduren wird die Text-Eigenschaft gelöscht, wenn die Refresh-Methode aufgerufen wird. In diesen Beispielen ist SSCombo der Name des Kombinationsfeld-Steuerelements von Sheridan.

Sub SSCombo_InitColumnProps()
    SSCombo.Text=""
End Sub

Sub Refresh_OnClick
    ADC1.Refresh
    SSCombo.Text=""
End Sub


Gegenseitiges Sperren mit Isolationsstufe "Read Repeatable"

Wenn ein benutzerdefiniertes Geschäftsobjekt eine Isolationsebene "Read Repeatable" für das Zugreifen auf einen SQL-Server verwendet und wenn das Geschäftsobjekt gleichzeitig von zwei Clients aufgerufen wird, die eine Abfrage und eine Aktualisierung in derselben Transaktion senden, kann ein gegenseitigen Sperren erfolgen. Remote Data Service erlaubt eine Zeitüberschreitung für einen der Prozesse, um das gegenseitige Sperren aufzuheben. Durch dieses Vorgehen schlägt jedoch die Aktualisierung für diesen Client fehl.

Sie können auf dem Webserver einen Registrierungseintrag hinzufügen, um die Länge der Zeitüberschreitung zu verändern. Die Voreinstellung beträgt 30 Sekunden (oder 30.000 Millisekunden).

So ändern Sie den Wert für die Zeitüberschreitung

  1. Klicken Sie im Menü Start auf Ausführen.

  2. Geben Sie RegEdit ein, und klicken Sie auf OK.

  3. Gehen Sie im Registrierungs-Editor zum Schlüssel HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W3SVC\Parameters.

  4. Wählen Sie den Parameters-Schlüssel aus. Zeigen Sie im Menü Bearbeiten auf Neu, und wählen Sie DWORD-Wert.

  5. Geben Sie in der Spalte Name den Begriff ADCUpdateTimeout ein, und drücken Sie die EINGABETASTE.

  6. Doppelklicken Sie auf den neuen Eintrag. Geben Sie im Dialogfeld DWORD-Wert bearbeiten in das Feld Wert den neuen Wert in Millisekunden ein. Der Wert muss größer oder gleich Null sein.


DataControl und mehrere Recordset-Anforderungen

Wenn Sie mehrere Ergebnisse abfragen, wird nur das erste Recordset-Objekt zurückgegeben. Wenn Sie mehrere Ergebnismengen benötigen, weisen Sie jede Ergebnismenge einem eigenen RDS.DataControl-Objekt zu. Ein Beispiel für eine Abfrage mit mehreren Ergebnissen ist: "Select * from Authors, Select * from Topics".


Überholte Klassenbezeichner

Wenn Sie einen Fehler erhalten, dass ein RDS.DataSpace- oder RDS.DataControl-Objekt nicht geladen wurde, stellen Sie sicher, dass Sie den richtigen Klassenbezeichner verwenden. Die Klassenbezeichner für diese Objekte haben sich in Version 1.1 gegenüber Version 1.0 geändert. Die richtigen Klassenbezeichner sind in der folgenden Tabelle aufgelistet.

Objekt | Klassenbezeichner
RDS.DataControl | BD96C556-65A3-11D0-983A-00C04FC29E33
RDS.DataSpace | BD96C556-65A3-11D0-983A-00C04FC29E36


ADO-Codebeispiele

Verwenden Sie die folgenden Codebeispiele, um zu erfahren, wie Sie die Objekte, Methoden und Eigenschaften von ADO einsetzen können.

Anmerkung Fügen Sie das gesamte Codebeispiel, von Sub bis End Sub, in Ihren Codeeditor ein. Wenn nur Teile der Beispiele verwendet werden oder die Absatzformatierung verloren geht, wird das Beispiel möglicherweise nicht ordnungsgemäß ausgeführt.

  • Beispiele für ADO-Objekte

  • Beispiele für ADO-Methoden

  • Beispiele für ADO-Eigenschaften


Beispiele für ADO-Objekte

Verwenden Sie die folgenden Codebeispiele, um zu erfahren, wie Sie die ADO-Objekte einsetzen können.

Anmerkung Fügen Sie das gesamte Codebeispiel, von Sub bis End Sub, in Ihren Codeeditor ein. Wenn nur Teile der Beispiele verwendet werden oder die Absatzformatierung verloren geht, wird das Beispiel möglicherweise nicht ordnungsgemäß ausgeführt.

  • Beispiel für RDS.DataControl-Objekt (VBScript)

  • Beispiel für RDS.DataSpace-Objekt und CreateObject-Methode (VBScript)

  • Beispiel für RDSServer.DataFactory-Objekt, Query- und CreateObject-Methode (VBScript)


Beispiel für DataControl-Objekt (VBScript)

Der folgende Code zeigt, wie die RDS.DataControl-Parameter zur Laufzeit festgelegt und unter Verwendung einer ODBC Datenquelle mit der Bezeichnung ADCDemo an datenbezogene Steuerelemente gebunden werden. Wenn Sie die Anweisungen beachtet haben, wurde ADCDemo als SQL Server ODBC-Datenquelle auf dem Server installiert. Schneiden Sie diesen Code aus, und fügen Sie ihn zwischen den Tags <BODY> und </BODY> in ein normales HTML-Dokument ein, und nennen Sie dieses Dokument ADCapi1.asp. ASP-Skript erkennt Ihren Server.

<Center><H2>RDS API-Codebeispiele</H2>
<HR><BR>
<H3>Remote Data Service</H3>
<Object CLASSID="clsid:AC05DC80-7DF1-11d0-839E-00A024A94B3A"
    CODEBASE="http://<%=Request.ServerVariables("SERVER_NAME")%>/MSADC/Samples/Sheridan.cab"
    ID=GRID1
        datasrc=#ADC
        HEIGHT=125
        WIDTH=495>
    <PARAM NAME="AllowAddNew" VALUE="TRUE">
    <PARAM NAME="AllowDelete" VALUE="TRUE">
    <PARAM NAME="AllowUpdate" VALUE="TRUE">
</OBJECT>
<!-- Remote Data Service mit Parametern, die während der Entwurfszeit gesetzt wurden -->
<OBJECT classid="clsid:BD96C556-65A3-11D0-983A-00C04FC29E33"
    ID=ADC>
    <PARAM NAME="SQL" VALUE="Select * from Employee for browse">
    <PARAM NAME="SERVER" VALUE="http://<%=Request.ServerVariables("SERVER_NAME")%>">
    <PARAM NAME="CONNECT" VALUE="dsn=ADCDemo;UID=ADCDemo;PWD=ADCDemo;">
</OBJECT><BR><HR></Center>

Im folgenden Beispiel wird gezeigt, wie die erforderlichen Parameter von RDS.DataControl während der Laufzeit gesetzt werden. Schneiden Sie zum Testen dieses Beispiels den Code aus und fügen Sie ihn zwischen den Tags <BODY> und </BODY> eines einfachen HTML-Dokuments ein, dem Sie die Bezeichnung ADCapi2.asp geben. ASP-Skript erkennt Ihren Server.

<Center><H2>RDS API-Codebeispiele </H2>
<HR><BR>
<H3>Remote Data Service – Laufzeit</H3>
<Object CLASSID="clsid:AC05DC80-7DF1-11d0-839E-00A024A94B3A"
    CODEBASE="http://<%=Request.ServerVariables("SERVER_NAME")%>/MSADC/Samples/Sheridan.cab"
    ID=GRID1
        datasrc=#ADC
        HEIGHT=125
        WIDTH=495>
    <PARAM NAME="AllowAddNew" VALUE="TRUE">
    <PARAM NAME="AllowDelete" VALUE="TRUE">
    <PARAM NAME="AllowUpdate" VALUE="TRUE">
    <PARAM NAME="Caption" VALUE="Remote Data Service Run Time">
</OBJECT>

<!-- RDS.DataControl ohne Parameter, die während der Entwurfszeit gesetzt wurden -->
<OBJECT classid="clsid:BD96C556-65A3-11D0-983A-00C04FC29E33"
    ID=ADC>
    </OBJECT>
<HR>
<Input Size=70 Name="txtServer" Value="http://<%=Request.ServerVariables("SERVER_NAME")%>"><BR>
<Input Size=70 Name="txtConnect" Value="dsn=ADCDemo;UID=ADCDemo;PWD=ADCDemo;">
<BR>
<Input Size=70 Name="txtSQL" Value="Select * from Employee">
<HR>
<INPUT TYPE=BUTTON NAME="Run" VALUE="Run"><BR>
<H4>Füllen Sie das Daten-Steuerelement mit diesen Werten oder ändern Sie sie, um Daten aus einer anderen ODBC-Datenquellen auf dem Server zu sehen</H4>
</Center>
<Script Language="VBScript">
<!--
' Setzen der Parameter von RDS.DataControl während der Laufzeit
Sub Run_OnClick
    ADC.Server = txtServer.Value
    ADC.SQL = txtSQL.Value
    ADC.Connect = txtConnect.Value
    ADC.Refresh
End Sub
-->
</Script>


Beispiel für DataSpace-Objekt- und die CreateObject-Methode (VBScript)

Das folgende Beispiel zeigt die Verwendung der CreateObject-Methode des RDS.DataSpace-Objekts mit dem Standard-Geschäftsobjekt RDSServer.DataFactory. Schneiden Sie zum Testen dieses Beispiels den Code aus und fügen Sie ihn zwischen den Tags <BODY> und </BODY> eines einfachen HTML-Dokuments ein, dem Sie die Bezeichnung ADCapi8.asp geben. ASP-Skript erkennt Ihren Server.

<Center><H2>RDS API-Codebeispiele </H2>
<HR><H3>Verwenden der Abfragemethode von RDSServer.DataFactory</H3>

<!-- RDS.DataSpace  ID ADS1-->
<OBJECT ID="ADS1" WIDTH=1 HEIGHT=1
CLASSID="CLSID:BD96C556-65A3-11D0-983A-00C04FC29E36">
</OBJECT>

<!-- RDS.DataControl mit während der Laufzeit gesetzten Parametern -->
<OBJECT classid="clsid:BD96C556-65A3-11D0-983A-00C04FC29E33"
    ID=ADC>
</OBJECT>

<Object CLASSID="clsid:AC05DC80-7DF1-11d0-839E-00A024A94B3A"
    CODEBASE="http://<%=Request.ServerVariables("SERVER_NAME")%>/MSADC/Samples/Sheridan.cab"
    ID=GRID1
        datasrc=#ADC
        HEIGHT=125
        WIDTH=495>
    <PARAM NAME="AllowAddNew" VALUE="TRUE">
    <PARAM NAME="AllowDelete" VALUE="TRUE">
    <PARAM NAME="AllowUpdate" VALUE="TRUE">
    <PARAM NAME="Caption" VALUE="RDSServer.DataFactory Run Time">
</OBJECT>
<HR>
<INPUT TYPE=BUTTON NAME="Run" VALUE="Run"><BR>
<H4>Klicken Sie auf <b>Ausführen</b>. Die CreateObject-Methode des RDS.DataSpace-Objekts erstellt eine Instanz des RDSServer.DataFactory-Objekts.
Die Query-Methode von RDSServer.DataFactory wird verwendet, um ein Recordset-Objekt zurückzuholen. </H4>
</Center>
<Script Language="VBScript">
Dim ADF
Dim strServer
Dim strConnect
Dim strSQL
strServer = "http://<%=Request.ServerVariables("SERVER_NAME")%>"
strConnect = "dsn=ADCDemo;UID=ADCDemo;PWD=ADCDemo;"
strSQL = "Select * from Employee"

Sub Run_OnClick()
    Dim objADORs        'Recordset-Objekt erstellen
Set ADF = ADS1.CreateObject("RDSServer.DataFactory", strServer)                ' Nehmen des Recordset
Set objADORs = ADF.Query(strConnect, strSQL)
' Verwenden von RDS.DataControl, um Recordset an Daten zu binden.
' Aktualisieren von verbundenem Grid-Steuerelement.

    ADC.SourceRecordset = objADORs

End Sub
-->
</Script>

Das folgende Beispiel zeigt die Verwendung der CreateObject-Methode zum Erstellen einer Instanz des benutzerdefinierten Geschäftsobjekts VbBusObj.VbBusObjCls. Weiterhin wird die Skripterstellung mit Active Server Pages zum Angeben des Webservernamens verwendet. Um das vollständige Beispiel anzuzeigen, wählen Sie im Beispielanwendungsselektor in der Spalte Clientebene “VBScript in Internet Explorer” und in der Spalte Mittlere Ebene “Custom Visual Basic Business Object” aus.

Sub Window_OnLoad()
    strServer = "http://<%=Request.ServerVariables("SERVER_NAME")%>"
    Set BO = ADS1.CreateObject("VbBusObj.VbBusObjCls", strServer)
    txtConnect.Value = "dsn=pubs;uid=sa;pwd=;"
    txtGetRecordset.Value = "Select * From authors for Browse"
End Sub


Beispiel für DataFactory-Objekt, Query-Methode und CreateObject-Methode (VBScript)

In diesem Beispiel wird ein RDSServer.DataFactory-Objekt unter Verwendung der CreateObject-Methode des RDS.DataSpace-Objekts erstellt. Schneiden Sie zum Testen dieses Beispiels den Code aus und fügen Sie ihn zwischen den Tags <BODY> und </BODY> eines einfachen HTML-Dokuments ein, dem Sie die Bezeichnung ADCapi7.asp geben. ASP-Skript erkennt Ihren Server.

<Center><H2>RDS API-Codebeispiele</H2>
<HR><H3>Verwenden der Abfragemethode von RDSServer.DataFactory</H3>

<!-- RDS.DataSpace  ID ADS1-->
<OBJECT ID="ADS1" WIDTH=1 HEIGHT=1
CLASSID="CLSID:BD96C556-65A3-11D0-983A-00C04FC29E36">
</OBJECT>

<!-- RDS.DataControl mit Parametern,
die während der Laufzeit gesetzt wurden -->
<OBJECT classid="clsid:BD96C556-65A3-11D0-983A-00C04FC29E33"
    ID=ADC>
</OBJECT>

<Object classid ="clsid:AC05DC80-7DF1-11d0-839E-00A024A94B3A"
    CODEBASE="http://<%=Request.ServerVariables _
    ("SERVER_NAME")%>/MSADC/Samples/Sheridan.cab"
    ID=GRID1
        datasrc=#ADC
        HEIGHT=125
        WIDTH=495>
    <PARAM NAME="AllowAddNew" VALUE="TRUE">
    <PARAM NAME="AllowDelete" VALUE="TRUE">
    <PARAM NAME="AllowUpdate" VALUE="TRUE">
    <PARAM NAME="Caption" VALUE=" RDSServer.DataFactory Run Time">
</OBJECT>
<HR>
<INPUT TYPE=BUTTON NAME="Run" VALUE="Run"><BR>
<H4>Klicken Sie auf <b>Ausführen</b>. Die CreateObject-Methode des
RDS.DataSpace-Objekts erstellt eine Instanz des
RDSServer.DataFactory-Objekts.
Die Query-Methode des RDSServer.DataFactory-Objekts wird
verwendet, um ein Recordset zurückzuholen. </H4>
</Center>
<Script Language="VBScript">
<!--
Dim ADF
Dim strServer
Dim strConnect
Dim strSQL

strServer = "http://<%=Request.ServerVariables _
("SERVER_NAME")%>"
strConnect = "dsn=ADCDemo;UID=ADCDemo;PWD=ADCDemo;"
strSQL = "Select * from Employee"

Sub Run_OnClick()
' Erstellen eines RDSServer.DataFactory-Objekts
    Dim objADORs
' Nehmen des Recordset
Set ADF = ADS1.CreateObject("RDSServer.DataFactory", strServer)
Set objADORs = ADF.Query(strConnect, strSQL)
' Setzen der Parameter von RDS.DataControl während der Laufzeit
    ADC.Server = strServer
    ADC.SQL = strSQL
    ADC.Connect = strConnect
    ADC.Refresh
End Sub
-->
</Script>


Beispiele für die ADO-Methode

In den folgenden Themen erfahren Sie, wie Sie ADO-Methoden einsetzten können.

Anmerkung Fügen Sie das gesamte Codebeispiel, von Sub bis End Sub, in Ihren Codeeditor ein. Wenn nur Teile der Beispiele verwendet werden oder die Absatzformatierung verloren geht, wird das Beispiel möglicherweise nicht ordnungsgemäß ausgeführt.

  • Beispiel für die AddNew-Methode

  • Beispiel für die Methoden Append und CreateParameter

  • AppendChunk and GetChunk Methods Example

  • Beispiel für die Methoden BeginTrans, CommitTrans und RollbackTrans

  • Beispiel für die Cancel-Methode

  • Beispiel für die Cancel-Methode (VBScript)

  • Beispiel für die CancelUpdate-Methode (VBScript)

  • Beispiel für die Clone-Methode (Visual Basic)

  • Beispiel für die ConvertToString-Methode (VBScript)

  • Beispiel für die CreateRecordset-Methode (VBScript)

  • Beispiel für die Delete-Methode

  • Beispiel für die Methoden Execute, Requery und Clear

  • Beispiel für die GetRows-Methode

  • Beispiel für die Move-Methode

  • Beispiel für die Methoden MoveFirst, MoveLast, MoveNext und MovePrevious

  • Beispiel für die NextRecordset-Methode

  • Beispiel für die Methoden Open und Close

  • Beispiel für die OpenSchema-Methode

  • Beispiel für die Refresh-Methode (Visual Basic)

  • Beispiel für die Refresh-Methode (VBScript)

  • Beispiel für die Resync-Methode

  • Beispiel für die SubmitChanges-Methode (VBScript)

  • Beispiel für die Supports-Methode

  • Beispiel für die Methoden Update and CancelUpdate

  • Beispiel für die Methoden UpdateBatch and CancelBatch


Beispiel für die AddNew-Methode

In diesem Beispiel wird die AddNew-Methode zum Erstellen eines neuen Datensatzes mit dem angegebenen Namen verwendet.

Public Sub AddNewX()

    Dim cnn1 As ADODB.Connection
    Dim rstEmployees As ADODB.Recordset
    Dim strCnn As String
    Dim strID As String
    Dim strFirstName As String
    Dim strLastName As String
    Dim booRecordAdded As Boolean

    ' Öffnen einer Verbindung.
    Set cnn1 = New ADODB.Connection
    strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"
    cnn1.Open strCnn

    ' Öffnen der Employee-Tabelle.
    Set rstEmployees = New ADODB.Recordset
    rstEmployees.CursorType = adOpenKeyset
    rstEmployees.LockType = adLockOptimistic
    rstEmployees.Open "employee", cnn1, , , adCmdTable

    ' Abrufen von Benutzerdaten. Die Employee-ID muss das  ' folgende Format besitzen:
    Jeweils die Initialen für Nachnamen,  ' zweiten Vornamen und ersten Vornamen, fünf Zahlen und dann M
    ' (männlich) bzw. F (weiblich) als Geschlechtsangabe. Für Bernd
    ' Schmitt würde z.B. die Employee-ID "B-S55555M" lauten.
    strID = Trim(InputBox("Enter employee ID:"))
    strFirstName = Trim(InputBox("Enter first name:"))
    strLastName = Trim(InputBox("Enter last name:"))

    ' Nur fortfahren, wenn tatsächlich für die ID und sowohl Vor-
    ' als auch Nachname eine Eingabe vorgenommen wurde.
    If (strID <> "") And (strFirstName <> "") _
        And (strLastName <> "") Then

        rstEmployees.AddNew
        rstEmployees!emp_id = strID
        rstEmployees!fname = strFirstName
        rstEmployees!lname = strLastName
        rstEmployees.Update
        booRecordAdded = True

        ' Anzeigen der neu hinzugefügten Daten.
        MsgBox "New record: " & rstEmployees!emp_id & " " & _
            rstEmployees!fname & " " & rstEmployees!lname

    Else
        MsgBox "Please enter an employee ID, " & _
            "first name and last name."
    End If

    ' Löschen des neuen Datensatzes, da es sich um eine Demonstration
    ' handelt. cnn1.Execute "DELETE FROM employee WHERE emp_id = '" & strID & "'"

    rstEmployees.Close
    cnn1.Close

End Sub

VBScript-Version

Bei folgendem Beispiel handelt es sich um das gleiche Beispiel, diesmal jedoch in VBScript für die Verwendung in einer Active Server Page (ASP) erstellt. Um sich dieses voll funktionsfähige Beispiel ansehen zu können, müssen Sie einen System-DSN (Data Source Name) erstellen.Diesen erstellen Sie unter Verwendung der mit IIS installierten und unter C:\InetPub\ASPSamp\AdvWorks gespeicherten Datenquelle AdvWorks.mdb. Es handelt sich hierbei um eine Datenbankdatei von Microsoft Access. Verwenden Sie den Befehl Suchen, um die Datei Adovbs.inc zu suchen, und verschieben Sie sie in das zu verwendende Verzeichnis. Schneiden Sie den folgenden Code aus, fügen Sie ihn in einem beliebigen Texteditor wieder ein, und speichern Sie ihn unter dem Dateinamen AddNew.asp. Das Ergebnis kann in jedem Clientbrowser angezeigt werden.

Um dieses Beispiel zu Übungszwecken auszuführen, fügen Sie einen neuen fiktiven Datensatz in dem HTML-Formular hinzu. Klicken Sie auf Add New. Informationen zum Entfernen nicht benötigter Datensätze finden Sie im Beispiel für die Delete-Methode.

<!-- #Include file="ADOVBS.INC" -->
<% Language = VBScript %>
<HTML><HEAD><TITLE>ADO Open Method</TITLE>
</HEAD><BODY>
<FONT FACE="MS SANS SERIF" SIZE=2>
<Center><H3>ADO AddNew Method</H3>
<!-- Verwenden eines ADO Connection-Objekts zum Erstellen eines Recordsets -->
<%
' Erstellen und Öffnen eines Connection-Objekts.
Set OBJdbConnection = Server.CreateObject("ADODB.Connection")
OBJdbConnection.Open "AdvWorks"
' Erstellen und Öffnen eines Recordset-Objekts.
Set RsCustomerList = Server.CreateObject("ADODB.Recordset")
RsCustomerList.ActiveConnection = OBJdbConnection
RsCustomerList.CursorType = adOpenKeyset
RsCustomerList.LockType = adLockOptimistic
RsCustomerList.Source = "Customers"
RsCustomerList.Open

%>
<!-- Wenn diese Seite erstmalig geöffnet wird, enthält die Forms-Auflistung vor dem Eingeben der Daten keine Einträge.

AddNew-Methode ausführen-->
<% If Not IsEmpty(Request.Form) Then
    If Not Request.Form("CompanyName") = "" Then
        RsCustomerList.AddNew
        RsCustomerList("CompanyName") = Request.Form("CompanyName")
        RsCustomerList("ContactLastName") = Request.Form("LastName")
        RsCustomerList("ContactFirstName") = Request.Form("FirstName")
        RsCustomerList("PhoneNumber") = Request.Form("PhoneNumber")
        RsCustomerList("City") = Request.Form("City")
        RsCustomerList("StateOrProvince") = Request.Form("State")
        RsCustomerList.Update
        RsCustomerList.MoveFirst

    End If
End If
%>

<TABLE COLSPAN=8 CELLPADDING=5 BORDER=0>

<!-- BEGIN Spaltenkopfzeile für Customer-Tabelle -->

<TR><TD ALIGN=CENTER BGCOLOR="#008080">
<FONT STYLE="ARIAL NARROW" COLOR="#ffffff" SIZE=1>Company Name</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#008080">
<FONT STYLE="ARIAL NARROW" COLOR="#ffffff" SIZE=1>Contact Name</FONT></TD>
<TD ALIGN=CENTER WIDTH=150 BGCOLOR="#008080">
<FONT STYLE="ARIAL NARROW" COLOR="#ffffff" SIZE=1>Phone Number</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#008080">
<FONT STYLE="ARIAL NARROW" COLOR="#ffffff" SIZE=1>City</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#008080">
<FONT STYLE="ARIAL NARROW" COLOR="#ffffff" SIZE=1>State/Province</FONT></TD></TR>
<!-- Anzeigen von ADO-Daten aus der Customer-Tabelle, eine Zeile je Durchlauf durch das Recordset -->
<% Do While Not RsCustomerList.EOF %>
  <TR><TD BGCOLOR="f7efde" ALIGN=CENTER>
  <FONT STYLE="ARIAL NARROW" SIZE=1>
  <%= RSCustomerList("CompanyName")%>
  </FONT></TD>
  <TD BGCOLOR="f7efde" ALIGN=CENTER>
  <FONT STYLE="ARIAL NARROW" SIZE=1>
  <%= RScustomerList("ContactLastName") & ", " %>
  <%= RScustomerList("ContactFirstName") %>
  </FONT></TD>
  <TD BGCOLOR="f7efde" ALIGN=CENTER>
  <FONT STYLE="ARIAL NARROW" SIZE=1>
   <%= RScustomerList("PhoneNumber")%>
 </FONT></TD>
  <TD BGCOLOR="f7efde" ALIGN=CENTER>
  <FONT STYLE="ARIAL NARROW" SIZE=1>
  <%= RScustomerList("City")%>
  </FONT></TD>
  <TD BGCOLOR="f7efde" ALIGN=CENTER>
  <FONT STYLE="ARIAL NARROW" SIZE=1>
  <%= RScustomerList("StateOrProvince")%>
  </FONT></TD></TR>
<!-- Nächste Zeile = Datensatzschleife und Hinzufügen der Zeile zur HTML-Tabelle -->
<%
RScustomerList.MoveNext
Loop
%>

</TABLE><HR>
<!-- Formular zum Eingeben neuer Datensätze übergibt Variablen zurück an diese Seite -->
<Table>
<Form Method = Post Action="AddNew.asp" Name=Form>
<TR><TD><P>Company Name:</TD>
<TD><Input Type="Text" Size="50" Name="CompanyName" Value = ""></P></TD>
<TR><TD><P>Contact First Name:</TD>
<TD><Input Type="Text" Size="50" Name="FirstName" Value = ""></P></TD>
<TR><TD><P>Contact Last Name:</TD>
<TD><Input Type="Text" Size="50" Name="LastName" Value = ""></P></TD>
<TR><TD><P>Contact Phone:</TD>
<TD><Input Type="Text" Size="50" Name="PhoneNumber" Value = ""></P></TD>
<TR><TD><P>City:</TD>
<TD><Input Type="Text" Size="50" Name="City" Value = ""></P></TD>
<TR><TD><P>State / Province:</TD>
<TD><Input Type="Text" Size="5" Name="State" Value = ""></P></TD>
<TR><TD><Input Type="Submit" Value="Add New "><Input Type="Reset" Value="Reset Form">
</Form></Table></Center></FONT>
<%'DSN-Position zeigen
Response.Write(OBJdbConnection)
%>
<Script Language = "VBScript">
Sub Form_OnSubmit
    MsgBox "Sending New Record to Server",,"ADO-ASP _Example"
End Sub
</Script>
</BODY></HTML>


Beispiel für die Methoden Append und CreateParameter

In diesem Beispiel werden die Append- und CreateParameter-Methoden zum Ausführen einer gespeicherten Prozedur mit einem Eingabeparameter verwendet.

Public Sub AppendX()

    Dim cnn1 As ADODB.Connection
    Dim cmdByRoyalty As ADODB.Command
    Dim prmByRoyalty As ADODB.Parameter
    Dim rstByRoyalty As ADODB.Recordset
    Dim rstAuthors As ADODB.Recordset
    Dim intRoyalty As Integer
    Dim strAuthorID As String
    Dim strCnn As String

    ' Öffnen der Verbindung.
    Set cnn1 = New ADODB.Connection
    strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"
    cnn1.Open strCnn
    cnn1.CursorLocation = adUseClient

    ' Öffnen des Command-Objekts mit einem Parameter.
    Set cmdByRoyalty = New ADODB.Command
    cmdByRoyalty.CommandText = "byroyalty"
    cmdByRoyalty.CommandType = adCmdStoredProc

    ' Abrufen des Parameterwertes und Anhängen des Parameters.
    intRoyalty = Trim(InputBox("Enter royalty:"))
    Set prmByRoyalty = cmdByRoyalty.CreateParameter("percentage", _
        adInteger, adParamInput)
    cmdByRoyalty.Parameters.Append prmByRoyalty
    prmByRoyalty.Value = intRoyalty

    ' Erstellen eines Recordsets durch Ausführen des Befehls.
    Set cmdByRoyalty.ActiveConnection = cnn1
    Set rstByRoyalty = cmdByRoyalty.Execute

    ' Öffnen der Authors-Tabelle, um Verfassernamen anzuzeigen.
    Set rstAuthors = New ADODB.Recordset
    rstAuthors.Open "authors", cnn1, , , adCmdTable

    ' Drucken der aktuellen Daten im Recordset, Hinzufügen der
    ' Verfassernamen der Authors-Tabelle.
    Debug.Print "Authors with " & intRoyalty & " percent royalty"
    Do While Not rstByRoyalty.EOF
        strAuthorID = rstByRoyalty!au_id
        Debug.Print "    " & rstByRoyalty!au_id & ", ";
        rstAuthors.Filter = "au_id = '" & strAuthorID & "'"
        Debug.Print rstAuthors!au_fname & " " & rstAuthors!au_lname
        rstByRoyalty.MoveNext
    Loop

    rstByRoyalty.Close
    rstAuthors.Close
    cnn1.Close

End Sub


Beispiel für die Methoden AppendChunk und GetChunk

In diesem Beispiel werden die Methoden AppendChunk und GetChunk zum Füllen eines Bildfeldes mit Daten aus einem anderen Datensatz verwendet.

Public Sub AppendChunkX()

    Dim cnn1 As ADODB.Connection
    Dim rstPubInfo As ADODB.Recordset
    Dim strCnn As String
    Dim strPubID As String
    Dim strPRInfo As String
    Dim lngOffset As Long
    Dim lngLogoSize As Long
    Dim varLogo As Variant
    Dim varChunk As Variant

    Const conChunkSize = 100

    ' Öffnen einer Verbindung.
    Set cnn1 = New ADODB.Connection
        strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"
    cnn1.Open strCnn

    ' Öffnen der pub_info-Tabelle.
    Set rstPubInfo = New ADODB.Recordset
    rstPubInfo.CursorType = adOpenKeyset
    rstPubInfo.LockType = adLockOptimistic
    rstPubInfo.Open "pub_info", cnn1, , , adCmdTable

    ' Anfordern eines zu kopierenden Logos.
    strMsg = "Available logos are : " & vbCr & vbCr
    Do While Not rstPubInfo.EOF
        strMsg = strMsg & rstPubInfo!pub_id & vbCr & _
            Left(rstPubInfo!pr_info, InStr(rstPubInfo!pr_info, ",") - 1) & _
            vbCr & vbCr
        rstPubInfo.MoveNext
    Loop
    strMsg = strMsg & "Enter the ID of a logo to copy:"
    strPubID = InputBox(strMsg)

    ' Blockweises Kopieren des Logos in eine Variable.
    rstPubInfo.Filter = "pub_id = '" & strPubID & "'"
    lngLogoSize = rstPubInfo!logo.ActualSize
    Do While lngOffset < lngLogoSize
        varChunk = rstPubInfo!logo.GetChunk(conChunkSize)
        varLogo = varLogo & varChunk
        lngOffset = lngOffset + conChunkSize
    Loop

    ' Abrufen von Benutzerdaten.
    strPubID = Trim(InputBox("Enter a new pub ID:"))
    strPRInfo = Trim(InputBox("Enter descriptive text:"))

    ' Hinzufügen eines neuen Datensatzes, blockweises Kopieren ' des Logos.
    rstPubInfo.AddNew
    rstPubInfo!pub_id = strPubID
    rstPubInfo!pr_info = strPRInfo

    lngOffset = 0 ' Zurücksetzen des Offsets.
    Do While lngOffset < lngLogoSize
        varChunk = LeftB(RightB(varLogo, lngLogoSize - lngOffset), _
            conChunkSize)
        rstPubInfo!logo.AppendChunk varChunk
        lngOffset = lngOffset + conChunkSize
    Loop
    rstPubInfo.Update

      ' Anzeigen der neu hinzugefügten Daten.
    MsgBox "Neuer Datensatz: " & rstPubInfo!pub_id & vbCr & _
        "Beschreibung: " & rstPubInfo!pr_info & vbCr & _
        "Logogröße: " & rstPubInfo!logo.ActualSize

    ' Löschen des neuen Datensatzes, da dies ein Beispiel ist.
    rstPubInfo.Requery
    cnn1.Execute "DELETE FROM pub_info " & _
        "WHERE pub_id = '" & strPubID & "'"

    rstPubInfo.Close
    cnn1.Close

End Sub


Beispiel für die Methoden BeginTrans, CommitTrans und RollbackTrans

In diesem Beispiel wird der Buchtyp sämtlicher Psychologiebücher in der Titles-Tabelle der Datenbank geändert. Nachdem die BeginTrans-Methode eine Transaktion ausgeführt hat, die alle an der Titles-Tabelle vorgenommenen Änderungen isoliert, speichert die CommitTrans-Methode die Änderungen. Mit der Rollback-Methode können unter Verwendung der Update-Methode gespeicherte Änderungen rückgängig gemacht werden.

Public Sub BeginTransX()

    Dim cnn1 As ADODB.Connection
    Dim rstTitles As ADODB.Recordset
    Dim strCnn As String
    Dim strTitle As String
    Dim strMessage As String

    ' Öffnen der Verbindung.
        strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"
    Set cnn1 = New ADODB.Connection
    cnn1.Open strCnn

    ' Öffnen der Titles-Tabelle.
    Set rstTitles = New ADODB.Recordset
    rstTitles.CursorType = adOpenDynamic
    rstTitles.LockType = adLockPessimistic
    rstTitles.Open "titles", cnn1, , , adCmdTable

    rstTitles.MoveFirst
    cnn1.BeginTrans

    ' Durchlaufen des Recordsets in Form von Schleifen, und Fragen,
    ' ob Benutzer den Typ für einen angegebenen Titel ändern möchten.
    Do Until rstTitles.EOF
        If Trim(rstTitles!Type) = "psychology" Then
            strTitle = rstTitles!Title
            strMessage = "Title: " & strTitle & vbCr & _
            "Change type to self help?"

            ' Ändern des Titels für den angegebenen
            ' Mitarbeiter.
            If MsgBox(strMessage, vbYesNo) = vbYes Then
                rstTitles!Type = "self_help"
                rstTitles.Update
            End If
        End If

            rstTitles.MoveNext
    Loop

    ' Fragen, ob alle oben durchgeführten Änderungen
    ' übernommen werden sollen.
    If MsgBox("Alle Änderungen speichern?", vbYesNo) = vbYes Then
        cnn1.CommitTrans
    Else
        cnn1.RollbackTrans
    End If

    ' Drucken der aktuellen Daten des Recordset.
    rstTitles.Requery
    rstTitles.MoveFirst
    Do While Not rstTitles.EOF
        Debug.Print rstTitles!Title & " - " & rstTitles!Type
        rstTitles.MoveNext
    Loop

    ' Wiederherstellen der ursprünglichen Daten,
    ' da es sich um eine Demonstration handelt.
    rstTitles.MoveFirst
    Do Until rstTitles.EOF
        If Trim(rstTitles!Type) = "self_help" Then
            rstTitles!Type = "psychology"
            rstTitles.Update
        End If
        rstTitles.MoveNext
    Loop

    rstTitles.Close
    cnn1.Close

End Sub


Beispiel für die Cancel-Methode

In diesem Beispiel wird die Cancel-Methode zum Abbrechen eines in einem Verbindungsobjekt ausgeführten Befehls verwendet, wenn die Verbindung belegt ist.

Public Sub CancelX()

    Dim cnn1 As ADODB.Connection
    Dim strCnn As String
    Dim strCmdChange As String
    Dim strCmdRestore As String
    Dim booChanged As Boolean

    ' Öffnen einer Verbindung.
    Set cnn1 = New ADODB.Connection
        strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"
    cnn1.Open strCnn

    ' Definieren einer Befehlszeichenfolge.
    strCmdChange = "UPDATE titles SET type = 'self_help' " & _
        "WHERE type = 'psychology'"
    strCmdRestore = "UPDATE titles SET type = 'psychology' " & _
        "WHERE type = 'self_help'"

    ' Starten einer Transaktion, dann asynchrones Ausführen ' eines Befehls.
    cnn1.BeginTrans
    cnn1.Execute strCmdChange, , adAsyncExecute

    ' Jetzt können andere Arbeiten durchgeführt werden. ' Dieser Teil kann geändert werden.
        For i = 1 To 10
            i = i + i
            Debug.Print i
        Next i

    ' Falls der Befehl NICHT ausgeführt wurde, Abbruch
    ' und Zurücksetzen der Transaktion. Andernfalls Bestätigen der
    ' Transaktion.
    If CBool(cnn1.State And adStateExecuting) Then
        cnn1.Cancel
        cnn1.RollbackTrans
        booChanged = False
        MsgBox "Update canceled."
    Else
        cnn1.CommitTrans
        booChanged = True
        MsgBox "Aktualisierung abgeschlossen."
    End If

    ' Nachdem die Änderungen durchgeführt wurden, Wiederherstellen der
    ' Daten, da es sich um eine Demonstration handelt.
    If booChanged Then
        cnn1.Execute strCmdRestore
        MsgBox "Daten wieder hergestellt."
    End If

    cnn1.Close

End Sub


Beispiel für die Cancel-Methode (VBScript)

Das folgende Beispiel zeigt, wie die Cancel-Methode zur Laufzeit im VBScript-Code gelesen wird.

<Script Language="VBScript">
<!--
Sub cmdCancelAsync
ADC.Cancel
' Beenden von aktuell ausgeführtem AsyncExecute,
' Setzen der ReadyState-Eigenschaft auf adcReadyStateLoaded,
' Setzen des Recordset-Objekts auf Nothing.
End Sub
-->
</Script>


Beispiel für die CancelUpdate-Methode (VBScript)

Um dieses Beispiel zu testen, schneiden Sie den Code aus und fügen ihn zwischen den Tags <BODY> und </BODY> in einem einfachen HTML-Dokument wieder ein, dem Sie die Bezeichnung ADCapi6.asp geben. ASP-Skript erkennt Ihren Server.

<Center><H2>RDS API Code Examples</H2>
<HR><H3>Remote Data Service SubmitChanges and CancelUpdate Methods</H3>

<!-- RDS.DataControl with parameters set at design time -->
<OBJECT classid="clsid:BD96C556-65A3-11D0-983A-00C04FC29E33"
    ID=ADC>
    <PARAM NAME="SQL" VALUE="Select * from Employee for browse">
    <PARAM NAME="SERVER" VALUE="http://<%=Request.ServerVariables("SERVER_NAME")%>">
    <PARAM NAME="CONNECT" VALUE="dsn=ADCDemo;UID=ADCDemo;PWD=ADCDemo;">
</OBJECT>

<Object classid="clsid:AC05DC80-7DF1-11d0-839E-00A024A94B3A"
    CODEBASE="http://<%=Request.ServerVariables("SERVER_NAME")%>/MSADC/Samples/Sheridan.cab"
    ID=GRID1
        datasrc=#ADC
        HEIGHT=125
        WIDTH=495>
    <PARAM NAME="AllowAddNew" VALUE="TRUE">
    <PARAM NAME="AllowDelete" VALUE="TRUE">
    <PARAM NAME="AllowUpdate" VALUE="TRUE">
    <PARAM NAME="Caption" VALUE="Remote Data Service Run Time">
</OBJECT>
<HR>
<INPUT TYPE=BUTTON NAME="SubmitChange" VALUE="Submit-Changes"><INPUT TYPE=BUTTON NAME="CancelChange" VALUE="Cancel-Update"><BR>
<H4>Fügt eine neue Person hinzu oder ändert einen aktuellen Eintrag in der Tabelle. Schiebt diese Zeile weg. <BR>
Übermittelt die Änderungen an die DBMS oder bricht die Aktualisierungen ab. </H4>
</Center>
<Script Language="VBScript">
<!--
' Setzen der Parameter von RDS.DataControl während der Laufzeit
Sub SubmitChange_OnClick
    ADC.SubmitChanges
    ADC.Refresh
End Sub

Sub CancelUpdate_OnClick
    ADC.CancelUpdate
End Sub
-->
</Script>


Beispiel für die Clone-Methode (Visual Basic)

In diesem Beispiel wird die Clone-Methode zum Erstellen von Kopien eines Recordset-Objekts verwendet. Anschließend kann der Datensatzzeiger unabhängig auf jede einzelne Kopie gesetzt werden.

Public Sub CloneX()

    Dim arstStores(1 To 3) As ADODB.Recordset
    Dim intLoop As Integer
    Dim strSQL As String
    Dim strCnn As String
    Dim strMessage As String
    Dim strFind As String

    ' Zuweisen der SQL-Anweisung und der Verbindungszeichenfolge zu ' Variablen.
    strSQL = "SELECT stor_name FROM Stores " & _
        "ORDER BY stor_name"
        strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"

    ' Öffnen des Recordsets als Recordset mit statischem ' Cursor.
    Set arstStores(1) = New ADODB.Recordset
    arstStores(1).CursorType = adOpenStatic
    arstStores(1).LockType = adLockBatchOptimistic
    arstStores(1).Open strSQL, strCnn, , , adCmdText

    ' Erstellen von zwei Duplikaten des ursprünglichen Recordset-Objekts.
    Set arstStores(2) = arstStores(1).Clone
    Set arstStores(3) = arstStores(1).Clone

    Do While True

        ' Durchlaufen des Arrays in Form von Schleifen, damit bei
        ' jeder Übergabe eine andere Kopie desselben Recordset-Objekts
        ' durchsucht wird.
        For intLoop = 1 To 3

            ' Anfordern der Suchzeichenfolge, wobei angezeigt wird, wo sich
            ' der aktuelle Datensatzzeiger für jedes Recordset befindet.
            strMessage = _
                "Recordsets aus Stores-Tabelle:" & vbCr & _
                "  1 - Original - Record pointer at " & _
                arstStores(1)!stor_name & vbCr & _
                "  2 - Clone - Record pointer at " & _
                arstStores(2)!stor_name & vbCr & _
                "  3 - Clone - Record pointer at " & _
                arstStores(3)!stor_name & vbCr & _
                "Enter search string for #" & intLoop & ":"
            strFind = Trim(InputBox(strMessage))
            If strFind = "" Then Exit Do

            ' Suchen der Suchzeichenfolge; wird keine Übereinstimmung
            ' gefunden, Springen zum letzten Datensatz.
            arstStores(intLoop).Filter = "stor_name >= '" & strFind & "'"
            If arstStores(intLoop).EOF Then
                arstStores(intLoop).Filter = adFilterNone
                arstStores(intLoop).MoveLast
            End If

        Next intLoop

    Loop

    arstStores(1).Close
    arstStores(2).Close
    arstStores(3).Close

End Sub

VBScript-Version

Bei folgendem Beispiel handelt es sich um das gleiche Beispiel, diesmal jedoch in VBScript für die Verwendung in einer Active Server Page (ASP) erstellt. Um sich dieses voll funktionsfähige Beispiel ansehen zu können, müssen Sie einen System-DSN (Data Source Name) erstellen.Diesen erstellen Sie unter Verwendung der mit IIS installierten und unter C:\InetPub\ASPSamp\AdvWorks gespeicherten Datenquelle AdvWorks.mdb. Es handelt sich hierbei um eine Datenbankdatei von Microsoft Access. Verwenden Sie den Befehl Suchen, um die Datei Adovbs.inc zu suchen, und verschieben Sie sie in das zu verwendende Verzeichnis. Schneiden Sie den folgenden Code aus, fügen Sie ihn in einem beliebigen Texteditor wieder ein, und speichern Sie ihn unter dem Dateinamen Clone.asp. Das Ergebnis kann in jedem Clientbrowser angezeigt werden.

Um dieses Beispiel zu Übungszwecken auszuführen, ändern Sie die Zeile RsCustomerList.Source = "Customers" in RsCustomerList.Source = "Products". Auf diese Weise können Sie eine umfangreichere Tabelle berechnen.

<!-- #Include file="ADOVBS.INC" -->
<% Language = VBScript %>
<HTML><HEAD>
<TITLE>ADO Clone-Methode</TITLE>
</HEAD><BODY> <Center>
<H3>ADO Clone-Methode</H3>
<!-- Verwenden eines ADO Connection-Objekts zum Erstellen eines Recordsets -->
<%
'Erstellen und Öffnen des Connection-Objekts.
Set OBJdbConnection = Server.CreateObject("ADODB.Connection")
OBJdbConnection.Open "AdvWorks"
'Erstellen und Öffnen des Recordset-Objekts.
Set RsCustomerList = Server.CreateObject("ADODB.Recordset")
RsCustomerList.ActiveConnection = OBJdbConnection
RsCustomerList.CursorType = adOpenKeyset
RsCustomerList.LockType = adLockOptimistic
RsCustomerList.Source = "Customers"
RsCustomerList.Open
%>
<HR>
<!-- Durchlaufen der Customers-Tabelle in Form von Schleifen, wobei der Counter-Variablen bei jedem Durchlauf 1 hinzugefügt wird.
<%
    Set MyRecordset = RSCustomerList.Clone
    Counter = 0
    Do Until MyRecordset.EOF
        Counter = Counter + 1
        MyRecordset.MoveNext
    Loop
%>
<!-- Anzeigen der Ergebnisse -->
<H3>There Are <%=Counter %> Records in the Customers Table</H3>
<BR><HR>
<H4>Location of DSN Datbase</H4>
<%'DSN-Position zeigen
Response.Write(OBJdbConnection)
%>
<HR></Center></BODY></HTML>


Beispiel für die ConvertToString-Methode (VBScript)

Sub QueryRecordset_OnClick()
    Dim objADORs
        strServer = "http://<%=Request.ServerVariables("SERVER_NAME")%>"
        Set ADF = ADS1.CreateObject _
        ("RDSServer.DataFactory", strServer)
    Set objADORs = ADF.Query _
    (txtConnect.Value,txtQueryRecordset.Value)

ADF.ConvertToString(objADORs)

End Sub


Beispiel für die CreateRecordset-Methode (VBScript)

Mit diesem Codebeispiel wird ein ADODB.Recordset-Objekt auf Seiten des Servers erstellt. Es verfügt über zwei Spalten mit jeweils vier Zeilen.

Sub CreateARecordSet
    Dim ColInfo(1), c0(3), c1(3)

    c0(0) = "Name"            ' Spaltenname.
    c0(1) = CInt(129)        ' Spaltentyp (129 = adChar).
    c0(2) = CInt(40)        ' Spaltengröße.
    c0(3) = False            ' Kann die Spalte den Wert Null enthalten?

    c1(0) = "Age"            ' Spaltenname.
    c1(1) = CInt(3)        ' Spaltentyp (3 = adInteger).
    c1(2) = CInt(-1)        ' Spaltengröße.
    c1(3) = True            ' Kann die Spalte den Wert Null enthalten?

    ' Hinzufügen der Spalten zu der Definition des Recordsets.
    ColInfo(0) = c0
    ColInfo(1) = c1

    ADC1.SourceRecordset = ADF1.CreateRecordset(ColInfo)
End Sub


Beispiel für die Delete-Methode

In diesem Beispiel wird die Delete-Methode zum Entfernen eines angegebenen Datensatzes aus einem Recordset-Objekt verwendet.

Public Sub DeleteX()

    Dim rstRoySched As ADODB.Recordset
    Dim strCnn As String
    Dim strMsg As String
    Dim strTitleID As String
    Dim intLoRange As Integer
    Dim intHiRange As Integer
    Dim intRoyalty As Integer

    ' Öffnen der RoySched-Tabelle.
        strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"
    Set rstRoySched = New ADODB.Recordset
    rstRoySched.CursorLocation = adUseClient
    rstRoySched.CursorType = adOpenStatic
    rstRoySched.LockType = adLockBatchOptimistic
    rstRoySched.Open "SELECT * FROM roysched " & _
        "WHERE royalty = 20", strCnn, , , adCmdText

    ' Anfordern eines zu löschenden Datensatzes.
    strMsg = "Vor dem Löschen existieren " & _
        rstRoySched.RecordCount & _
        " Titel mit 20 Prozent Tantiemen:" & vbCr & vbCr
    Do While Not rstRoySched.EOF
        strMsg = strMsg & rstRoySched!title_id & vbCr
        rstRoySched.MoveNext
    Loop
    strMsg = strMsg & vbCr & vbCr & _
        "Eingeben des ID eines zu löschenden Datensatzes:"
    strTitleID = UCase(InputBox(strMsg))

    ' Wechseln zum Datensatz und Speichern der Daten, ' damit diese wiederhergestellt werden können.
    rstRoySched.Filter = "title_id = '" & strTitleID & "'"
    intLoRange = rstRoySched!lorange
    intHiRange = rstRoySched!hirange
    intRoyalty = rstRoySched!royalty

    ' Löschen des Datensatzes.
    rstRoySched.Delete
    rstRoySched.UpdateBatch

    ' Anzeigen der Ergebnisse.
    rstRoySched.Filter = adFilterNone
    rstRoySched.Requery
    strMsg = ""
    strMsg = "After delete there are " & _
        rstRoySched.RecordCount & _
        " Titel mit 20 Prozent Tantiemen:" & vbCr & vbCr
    Do While Not rstRoySched.EOF
        strMsg = strMsg & rstRoySched!title_id & vbCr
        rstRoySched.MoveNext
    Loop
    MsgBox strMsg

    ' Wiederherstellen der Daten, da es sich um eine Demonstration handelt.
    rstRoySched.AddNew
    rstRoySched!title_id = strTitleID
    rstRoySched!lorange = intLoRange
    rstRoySched!hirange = intHiRange
    rstRoySched!royalty = intRoyalty
    rstRoySched.UpdateBatch

    rstRoySched.Close

End Sub

VBScript-Version

Bei folgendem Beispiel handelt es sich um das gleiche Beispiel, diesmal jedoch in VBScript für die Verwendung in einer Active Server Page (ASP) erstellt. Um sich dieses voll funktionsfähige Beispiel ansehen zu können, müssen Sie einen System-DSN (Data Source Name) erstellen.Diesen erstellen Sie unter Verwendung der mit IIS installierten und unter C:\InetPub\ASPSamp\AdvWorks gespeicherten Datenquelle AdvWorks.mdb. Es handelt sich hierbei um eine Datenbankdatei von Microsoft Access. Verwenden Sie den Befehl Suchen, um die Datei Adovbs.inc zu suchen, und verschieben Sie sie in das zu verwendende Verzeichnis. Schneiden Sie den folgenden Code aus, fügen Sie ihn in einem beliebigen Texteditor wieder ein, und speichern Sie ihn unter dem Dateinamen Delete.asp. Das Ergebnis kann in jedem Clientbrowser angezeigt werden.

Um dieses Beispiel zu Übungszwecken auszuführen, fügen Sie mit dem AddNew-Beispiel zunächst einige Datensätze hinzu. Löschen Sie diese anschließend wieder. Das Ergebnis kann in jedem Clientbrowser angezeigt werden.

<!-- #Include file="ADOVBS.INC" -->
<% Language = VBScript %>

<HTML>

<HEAD><TITLE>ADO Delete-Methode</TITLE>
</HEAD><BODY>
<FONT FACE="MS SANS SERIF" SIZE=2>
<Center><H3>ADO Delete-Methode</H3>

<!-- Verwenden eines ADO Connection-Objekts zum Erstellen eines Recordsets -->
<%
' Erstellen und Öffnen eines Connection-Objekts.
Set OBJdbConnection = Server.CreateObject("ADODB.Connection")
OBJdbConnection.Open "AdvWorks"
' Erstellen und Öffnen eines Recordset-Objekts.
Set RsCustomerList = Server.CreateObject("ADODB.Recordset")
RsCustomerList.ActiveConnection = OBJdbConnection
RsCustomerList.CursorType = adOpenKeyset
RsCustomerList.LockType = adLockOptimistic
RsCustomerList.Source = "Customers"
RsCustomerList.Open
%>
<!-- Wechseln zum betreffenden Datensatz und Löschen des Datensatzes -->
<%

If Not IsEmpty(Request.Form("WhichRecord")) Then
    'Abfragen des Wertes, zu dem sich bewegt werden soll.
    Moves = Request.Form("WhichRecord")

    RsCustomerList.Move CInt(Moves)
    If Not RsCustomerList.EOF or RsCustomerList.BOF Then
        RsCustomerList.Delete 1
        RsCustomerList.MoveFirst

    Else
        Response.Write "Not a Valid Record Number"
        RsCustomerList.MoveFirst
    End If
End If

%>
<!-- BEGIN Spaltenkopfzeile für Customer-Tabelle -->

<TABLE COLSPAN=8 CELLPADDING=5 BORDER=0><TR>
<TD ALIGN=CENTER BGCOLOR="#008080">
<FONT STYLE="ARIAL NARROW" COLOR="#ffffff" SIZE=1>Company Name</FONT>
</TD>
<TD ALIGN=CENTER BGCOLOR="#008080">
<FONT STYLE="ARIAL NARROW" COLOR="#ffffff" SIZE=1>Contact Name</FONT>
</TD>
<TD ALIGN=CENTER WIDTH=150 BGCOLOR="#008080">
<FONT STYLE="ARIAL NARROW" COLOR="#ffffff" SIZE=1>Phone Number</FONT>
</TD>
<TD ALIGN=CENTER BGCOLOR="#008080">
<FONT STYLE="ARIAL NARROW" COLOR="#ffffff" SIZE=1>City</FONT>
</TD>
<TD ALIGN=CENTER BGCOLOR="#008080">
<FONT STYLE="ARIAL NARROW" COLOR="#ffffff" SIZE=1>State/Province</FONT>
</TD></TR>

<!-- Anzeigen von ADO-Daten aus der Customer-Tabelle mit einer Schleife durch das Recordset-Objekt, wobei der HTML-Tabelle bei jedem Durchlauf eine Zeile hinzugefügt wird -->
<% Do While Not RsCustomerList.EOF %>
  <TR><TD BGCOLOR="f7efde" ALIGN=CENTER>
  <FONT STYLE="ARIAL NARROW" SIZE=1>
  <%= RSCustomerList("CompanyName")%>
  </FONT></TD>
  <TD BGCOLOR="f7efde" ALIGN=CENTER>
  <FONT STYLE="ARIAL NARROW" SIZE=1>
  <%= RScustomerList("ContactLastName") & ", " %>
  <%= RScustomerList("ContactFirstName") %>
  </FONT></TD>
  <TD BGCOLOR="f7efde" ALIGN=CENTER>
  <FONT STYLE="ARIAL NARROW" SIZE=1>
  <%= RScustomerList("PhoneNumber")%>
 </FONT></TD>
  <TD BGCOLOR="f7efde" ALIGN=CENTER>
  <FONT STYLE="ARIAL NARROW" SIZE=1>
  <%= RScustomerList("City")%>
  </FONT></TD>
  <TD BGCOLOR="f7efde" ALIGN=CENTER>
  <FONT STYLE="ARIAL NARROW" SIZE=1>
  <%= RScustomerList("StateOrProvince")%>
  </FONT></TD>
  </TR>
<!-Nächste Zeile = Datensatzschleife und Hinzufügen zu HTML-Tabelle -->
<%
RScustomerList.MoveNext
Loop
%>
</Table></Center></FONT>
<!-- Überprüfen der clientbasierten Eingabedaten, Wechseln zu benanntem Datensatz und Löschen des Datensatzes -->

<Center>
<H4>Klicken auf die Schaltfläche entfernt den bezeichneten Datensatz</H4>
<H5>Es befinden sich <%=RsCustomerList.RecordCount - 1%> Datensätze in diesem Satz</H5>
<Form Method = Post Action = "Delete.asp" Name = Form>
<Input Type = Text Name = "WhichRecord" Size = 3></Form>
<Input Type = Button Name = cmdDelete Value = "Delete Record"></Center>

</BODY>

<Script Language = "VBScript">

Sub cmdDelete_OnClick
If IsNumeric(Document.Form.WhichRecord.Value) Then
    Document.Form.WhichRecord.Value = CInt(Document.Form.WhichRecord.Value)
Dim Response
    Response = MsgBox("Möchten Sie diesen Datensatz wirklich löschen?", vbYesNo,  "ADO-ASP Example")

    If Response = vbYes Then

    Document.Form.Submit

    End If
Else
    MsgBox "Sie müssen eine gültige Datensatznummer eingeben",,"ADO-ASP Example"
End If
End Sub

</Script>
</HTML>


Beispiel für die Methoden Execute, Requery und Clear

In diesem Beispiel wird die Verwendung der Execute-Methode demonstriert, wenn sie von einem Command-Objekt oder einem Connection-Objekt ausgeführt wird. Weiterhin wird die Requery-Methode zum Abrufen aktueller Daten in einem Recordset verwendet und mit der Clear-Methode wird der Inhalt der Errors-Auflistung gelöscht. Damit diese Prozedur ausgeführt werden kann, werden die Prozeduren ExecuteCommand und PrintOutput benötigt.

Public Sub ExecuteX()

    Dim strSQLChange As String
    Dim strSQLRestore As String
    Dim strCnn As String
    Dim cnn1 As ADODB.Connection
    Dim cmdChange As ADODB.Command
    Dim rstTitles As ADODB.Recordset
    Dim errLoop As ADODB.Error

    ' Definieren von zwei SQL-Anweisungen zum Ausführen als Befehlstext.
    strSQLChange = "UPDATE Titles SET Type = " & _
        "'self_help' WHERE Type = 'psychology'"
    strSQLRestore = "UPDATE Titles SET Type = " & _
        "'psychology' WHERE Type = 'self_help'"

    ' Öffnen der Verbindung.
        strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"
    Set cnn1 = New ADODB.Connection
    cnn1.Open strCnn

    ' Erstellen eines Command-Objekts.
    Set cmdChange = New ADODB.Command
    Set cmdChange.ActiveConnection = cnn1
    cmdChange.CommandText = strSQLChange

    ' Öffnen der Titles-Tabelle.
    Set rstTitles = New ADODB.Recordset
    rstTitles.Open "titles", cnn1, , , adCmdTable

    ' Drucken eines Berichts mit den ursprünglichen Daten.
    Debug.Print _
        "Daten in Titles-Tabelle vor Ausführen der Abfrage"
    PrintOutput rstTitles

    ' Löschen externer Fehler aus der Errors-Auflistung.
    cnn1.Errors.Clear

    ' Aufrufen der ExecuteCommand-Unterroutine zum Ausführen des ' cmdChange-Befehls.
    ExecuteCommand cmdChange, rstTitles

    ' Drucken eines Berichts mit den neuen Daten.
    Debug.Print _
        "Daten in Titles-Tabelle nach Ausführen der Abfrage"
    PrintOutput rstTitles

    ' Verwenden der Execute-Methode des Connection-Objekts, um eine
    ' SQL-Anweisung zum Wiederherstellen der Daten auszuführen. Auffangen von
    ' Fehlern, Überprüfen der Errors-Auflistung, falls notwendig.
    On Error GoTo Err_Execute
    cnn1.Execute strSQLRestore, , adExecuteNoRecords
    On Error GoTo 0

    ' Abrufen der aktuellen Daten durch erneutes Abfragen des Recordset.
    rstTitles.Requery

    ' Drucken eines Berichts mit den wiederhergestellten Daten.
    Debug.Print "Daten nach Ausführen der Abfrage, " & _
        "um die ursprünglichen Informationen wieder herzustellen"
    PrintOutput rstTitles

    rstTitles.Close
    cnn1.Close

    Exit Sub

Err_Execute:

    ' Benachrichtigen der Benutzer über Fehler, die durch das
    ' Ausführen der Abfrage aufgetreten sind.
    If Errors.Count > 0 Then
        For Each errLoop In Errors
            MsgBox "Fehler Nr.: " & errLoop.Number & vbCr & _
                errLoop.Description
        Next errLoop
    End If

    Resume Next

End Sub

Public Sub ExecuteCommand(cmdTemp As ADODB.Command, _
    rstTemp As ADODB.Recordset)

    Dim errLoop As Error

    ' Ausführen des angegebenen Command-Objekts. Auffangen von
    ' Fehlern, Überprüfen der Errors-Auflistung, falls notwendig.
    On Error GoTo Err_Execute
    cmdTemp.Execute
    On Error GoTo 0

    ' Abrufen der aktuellen Daten durch erneutes Abfragen des
    ' Recordsets. rstTemp.Requery

    Exit Sub

Err_Execute:

    ' Benachrichtigen der Benutzer über Fehler, die durch das
    ' Ausführen der Abfrage aufgetreten sind.
    If Errors.Count > 0 Then
        For Each errLoop In Errors
            MsgBox "Fehler Nr.: " & errLoop.Number & vbCr & _
                errLoop.Description
        Next errLoop
    End If

    Resume Next

End Sub

Public Sub PrintOutput(rstTemp As ADODB.Recordset)

    ' Durchgehen des Recordset.
    Do While Not rstTemp.EOF
        Debug.Print "  " & rstTemp!Title & _
            ", " & rstTemp!Type
        rstTemp.MoveNext
    Loop

End Sub

VBScript-Version

Bei folgendem Beispiel handelt es sich um das gleiche Beispiel, diesmal jedoch in VBScript für die Verwendung in einer Active Server Page (ASP) erstellt. Um sich dieses voll funktionsfähige Beispiel ansehen zu können, müssen Sie einen System-DSN (Data Source Name) erstellen.Diesen erstellen Sie unter Verwendung der mit IIS installierten und unter C:\InetPub\ASPSamp\AdvWorks gespeicherten Datenquelle AdvWorks.mdb. Es handelt sich hierbei um eine Datenbankdatei von Microsoft Access. Verwenden Sie den Befehl Suchen, um die Datei Adovbs.inc zu suchen, und verschieben Sie sie in das zu verwendende Verzeichnis. Schneiden Sie den folgenden Code aus, fügen Sie ihn in einem beliebigen Texteditor wieder ein, und speichern Sie ihn unter dem Dateinamen Execute.asp. Das Ergebnis kann in jedem Clientbrowser angezeigt werden.

<!-- #Include file="ADOVBS.INC" -->
<HTML><HEAD>
<TITLE>ADO Execute-Methode</TITLE></HEAD>

<BODY>
<FONT FACE="MS SANS SERIF" SIZE=2>
<Center><H3>ADO Execute-Methode</H3><H4>Abrufen von Recordset-Objekten unter Verwendung eines Connection-Objekts</H4>
<TABLE WIDTH=600 BORDER=0>
<TD VALIGN=TOP ALIGN=LEFT COLSPAN=3><FONT SIZE=2>

<!-- Abrufen von Recordset-Objekten unter Verwendung der Execute-Methode eines Connection- und Command-Objekts.
<%
Set OBJdbConnection = Server.CreateObject("ADODB.Connection")
OBJdbConnection.Open "AdvWorks"
SQLQuery = "SELECT * FROM Customers"
' Erstes Recordset-Objekt RSCustomerList.
Set RSCustomerList = OBJdbConnection.Execute(SQLQuery)

Set OBJdbCommand = Server.CreateObject("ADODB.Command")
OBJdbCommand.ActiveConnection = OBJdbConnection
SQLQuery2 = "SELECT * From Products"
OBJdbCommand.CommandText = SQLQuery2
Set RsProductList = OBJdbCommand.Execute

%>
<TABLE COLSPAN=8 CELLPADDING=5 BORDER=0>

<!-- BEGIN Spaltenkopfzeile für Customer-Tabelle -->

<TR><TD ALIGN=CENTER BGCOLOR="#008080">
<FONT STYLE="ARIAL NARROW" COLOR="#ffffff" SIZE=1>Company Name</FONT>
</TD>
<TD ALIGN=CENTER BGCOLOR="#008080">
<FONT STYLE="ARIAL NARROW" COLOR="#ffffff" SIZE=1>Contact Name</FONT>
</TD>
<TD ALIGN=CENTER WIDTH=150 BGCOLOR="#008080">
<FONT STYLE="ARIAL NARROW" COLOR="#ffffff" SIZE=1>E-mail address</FONT>
</TD>
<TD ALIGN=CENTER BGCOLOR="#008080">
<FONT STYLE="ARIAL NARROW" COLOR="#ffffff" SIZE=1>City</FONT>
</TD>
<TD ALIGN=CENTER BGCOLOR="#008080">
<FONT STYLE="ARIAL NARROW" COLOR="#ffffff" SIZE=1>State/Province</FONT>
</TD></TR>

<!-- Anzeigen von ADO-Daten aus der Customer-Tabelle -->
<% Do While Not RScustomerList.EOF %>
  <TR>
  <TD BGCOLOR="f7efde" ALIGN=CENTER>
  <FONT STYLE="ARIAL NARROW" SIZE=1>
  <%= RSCustomerList("CompanyName")%>
  </FONT></TD>
  <TD BGCOLOR="f7efde" ALIGN=CENTER>
  <FONT STYLE="ARIAL NARROW" SIZE=1>
  <%= RScustomerList("ContactLastName") & ", " %>
  <%= RScustomerList("ContactFirstName") %>
  </FONT></TD>
  <TD BGCOLOR="f7efde" ALIGN=CENTER>
  <FONT STYLE="ARIAL NARROW" SIZE=1>

  <%= RScustomerList("ContactLastName")%>
 </FONT></TD>
  <TD BGCOLOR="f7efde" ALIGN=CENTER>
  <FONT STYLE="ARIAL NARROW" SIZE=1>
  <%= RScustomerList("City")%>
  </FONT></TD>
  <TD BGCOLOR="f7efde" ALIGN=CENTER>
  <FONT STYLE="ARIAL NARROW" SIZE=1>
  <%= RScustomerList("StateOrProvince")%>
  </FONT></TD>
  </TR>
<!-Nächste Zeile = Datensatzschleife und Hinzufügen zu HTML-Tabelle -->
<%
RScustomerList.MoveNext
Loop
RScustomerList.Close

%>

</TABLE><HR>
<H4>Abrufen von Recordset-Objekten unter Verwendung eines Command-Objekts</H4>
<TABLE COLSPAN=8 CELLPADDING=5 BORDER=0>

<!-- BEGIN Spaltenkopfzeile für Products-Tabelle -->

<TR><TD ALIGN=CENTER BGCOLOR="#800000">
<FONT STYLE="ARIAL NARROW" COLOR="#ffffff" SIZE=1>Product Type</FONT>
</TD>
<TD ALIGN=CENTER BGCOLOR="#800000">
<FONT STYLE="ARIAL NARROW" COLOR="#ffffff" SIZE=1>Product Name</FONT>
</TD>
<TD ALIGN=CENTER WIDTH=350 BGCOLOR="#800000">
<FONT STYLE="ARIAL NARROW" COLOR="#ffffff" SIZE=1>Product Description</FONT>
</TD>
<TD ALIGN=CENTER BGCOLOR="#800000">
<FONT STYLE="ARIAL NARROW" COLOR="#ffffff" SIZE=1>Unit Price</FONT>
</TD></TR>

<!-- Anzeigen der Products-Tabelle -->
<% Do While Not RsProductList.EOF %>
  <TR>
  <TD BGCOLOR="f7efde" ALIGN=CENTER>
  <FONT STYLE="ARIAL NARROW" SIZE=1>
  <%= RsProductList("ProductType")%>
  </FONT></TD>
  <TD BGCOLOR="f7efde" ALIGN=CENTER>
  <FONT STYLE="ARIAL NARROW" SIZE=1>
  <%= RsProductList("ProductName")%>
  </FONT></TD>
  <TD BGCOLOR="f7efde" ALIGN=CENTER>
  <FONT STYLE="ARIAL NARROW" SIZE=1>
   <%= RsProductList("ProductDescription")%>
 </FONT></TD>

  <TD BGCOLOR="f7efde" ALIGN=CENTER>
  <FONT STYLE="ARIAL NARROW" SIZE=1>
  <%= RsProductList("UnitPrice")%>
  </FONT></TD>

<!-- Nächste Zeile = Datensatz -->
<%
RsProductList.MoveNext
Loop
'Entfernen von Objekten aus dem Speicher, um Ressourcen freizugeben.
RsProductList.Close
OBJdbConnection.Close
Set ObJdbCommand = Nothing
Set RsProductList = Nothing
Set OBJdbConnection = Nothing
%>
</TABLE></FONT></Center></BODY></HTML>


Beispiel für die GetRows-Methode

In diesem Beispiel wird die GetRows-Methode zum Abrufen einer festgelegten Anzahl von Zeilen aus einem Recordset-Objekt und zum Füllen eines Arrays mit den als Ergebnis angegebenen Daten verwendet. Die GetRows-Methode gibt in zwei Fällen weniger Daten als gewünscht zurück: wenn entweder EOF erreicht wurde oder die GetRows-Methode versucht hat, einen Datensatz abzurufen, der von einer anderen Person gelöscht wurde. Die Funktion gibt nur im zweiten Fall den Wert False zurück. Die GetRowsOK-Funktion wird benötigt, damit diese Prozedur ausgeführt werden kann.

Public Sub GetRowsX()

    Dim rstEmployees As ADODB.Recordset
    Dim strCnn As String
    Dim strMessage As String
    Dim intRows As Integer
    Dim avarRecords As Variant
    Dim intRecord As Integer

    ' Öffnen eines Recordsets mit Namen und Einstellungsdaten aus der Employee-Tabelle.
        strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"
    Set rstEmployees = New ADODB.Recordset
    rstEmployees.Open "SELECT fName, lName, hire_date " & _
        "FROM Employee ORDER BY lName", strCnn, , , adCmdText

    Do While True
        ' Abrufen der Benutzereingabe für die Zeilenanzahl.
        strMessage = "Geben Sie die Anzahl der abzurufenden Zeilen ein."
        intRows = Val(InputBox(strMessage))

        If intRows <= 0 Then Exit Do

        ' Wenn GetRowsOK erfolgreich durchgeführt wird, Drucken der ' Ergebnisse und Angabe, ob das Dateiende erreicht wurde.
        If GetRowsOK(rstEmployees, intRows, _
                avarRecords) Then
            If intRows > UBound(avarRecords, 2) + 1 Then
                Debug.Print "(Nicht genügend Datensätze in " & _
                    "abzufragendem Recordset " & intRows & _
                    " Zeilen.)"
            End If
            Debug.Print UBound(avarRecords, 2) + 1 & _
                " Datensätze wurden gefunden."
            ' Drucken der abgerufenen Daten.
            For intRecord = 0 To UBound(avarRecords, 2)
                Debug.Print "  " & _
                    avarRecords(0, intRecord) & " " & _
                    avarRecords(1, intRecord) & ", " & _
                    avarRecords(2, intRecord)
            Next intRecord
        Else
            Wenn der GetRows-Fehler wahrscheinlich aufgrund von ' Datenänderungen aufgetreten ist, die durch eine andere Person durchgeführt wurden, sollte die Requery-Methode ' zum Aktualisieren des Recordset-Objekts verwendet und ' erneut gestartet werden.
            If MsgBox("GetRows failed--retry?", _
                    vbYesNo) = vbYes Then
                rstEmployees.Requery
            Else
                Debug.Print "GetRows schlug fehl."
                Exit Do
            End If
        End If

        Da bei Verwendung von GetRows der aktuelle Datensatzzeiger ' auf dem Datensatz verbleibt, auf den zuletzt zugegriffen wurde, ' muss der Zeiger zurück zum Anfang des Recordset-Objekts verschoben werden, bevor die Schleife rückwärts ' durchlaufen wird, um eine weitere Suche durchzuführen.
        rstEmployees.MoveFirst
    Loop

    rstEmployees.Close

End Sub

Public Function GetRowsOK(rstTemp As ADODB.Recordset, _
    intNumber As Integer, avarData As Variant) As Boolean

    ' Speichern der Ergebnisse der GetRows-Methode in einem Array.
    avarData = rstTemp.GetRows(intNumber)
    ' Nur dann False zurückgeben, wenn weniger als die ' gewünschte Anzahl von Zeilen zurückgegeben wurde, jedoch nicht,' weil das Ende des Recordset-Objekts erreicht wurde.
    If intNumber > UBound(avarData, 2) + 1 And _
            Not rstTemp.EOF Then
        GetRowsOK = False
    Else
        GetRowsOK = True
    End If

End Function


Beispiel für die Move-Methode

In diesem Beispiel wird die Move-Methode zum Positionieren des Datensatzzeigers auf der Grundlage einer Benutzereingabe verwendet.

Public Sub MoveX()

    Dim rstAuthors As ADODB.Recordset
    Dim strCnn As String
    Dim varBookmark As Variant
    Dim strCommand As String
    Dim lngMove As Long

    ' Öffnen eines Recordsets aus der Authors-Tabelle.
        strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"
    Set rstAuthors = New ADODB.Recordset
    rstAuthors.CursorType = adOpenStatic
    ' Verwenden des Clientcursors, um das Verwenden der ' AbsolutePosition-Eigenschaft zu ermöglichen.
    rstAuthors.CursorLocation = adUseClient
    rstAuthors.Open "SELECT au_id, au_fname, au_lname, city, state " & _
        "FROM Authors ORDER BY au_lname", strCnn, , , adCmdText

    rstAuthors.MoveFirst

    Do While True
        Anzeigen von Informationen über den aktuellen Datensatz und Fragen, ' um wie viele Datensätze der Zeiger verschoben werden soll.

        strCommand = InputBox( _
            "Record " & rstAuthors.AbsolutePosition & _
            " of " & rstAuthors.RecordCount & vbCr & _
            "Author: " & rstAuthors!au_fname & _
            " " & rstAuthors!au_lname & vbCr & _
            "Location: " & rstAuthors!City & _
            ", " & rstAuthors!State & vbCr & vbCr & _
            "Geben Sie die Anzahl der zu verschiebenden Datensätze ein " & _
            "(positive or negative).")

        If strCommand = "" Then Exit Do

        ' Speichern eines Lesezeichens, für den Fall, dass das Verschieben ' zu weit vorwärts oder rückwärts durchgeführt wird.
        varBookmark = rstAuthors.Bookmark

        ' Die Move-Methode erfordert Parameter vom Datentyp Long.
        lngMove = CLng(strCommand)
        rstAuthors.Move lngMove

        ' Auffangen von Fehlern für die BOF- oder EOF-Eigenschaft.
        If rstAuthors.BOF Then
            MsgBox "Zu weit rückwärts! " & _
                "Zurückkehren zum aktuellen Datensatz."
            rstAuthors.Bookmark = varBookmark
        End If
        If rstAuthors.EOF Then
            MsgBox "Zu weit vorwärts! " & _
                "Zurückkehren zum aktuellen Datensatz."
            rstAuthors.Bookmark = varBookmark
        End If
    Loop
    rstAuthors.Close

End Sub

VBScript-Version

Bei folgendem Beispiel handelt es sich um das gleiche Beispiel, diesmal jedoch in VBScript für die Verwendung in einer Active Server Page (ASP) erstellt. Um sich dieses voll funktionsfähige Beispiel ansehen zu können, müssen Sie einen System-DSN (Data Source Name) erstellen.Diesen erstellen Sie unter Verwendung der mit IIS installierten und unter C:\InetPub\ASPSamp\AdvWorks gespeicherten Datenquelle AdvWorks.mdb. Es handelt sich hierbei um eine Datenbankdatei von Microsoft Access. Verwenden Sie den Befehl Suchen, um die Datei Adovbs.inc zu suchen, und verschieben Sie sie in das zu verwendende Verzeichnis. Schneiden Sie den folgenden Code aus, fügen Sie ihn in einem beliebigen Texteditor wieder ein, und speichern Sie ihn unter dem Dateinamen Move.asp. Das Ergebnis kann in jedem Clientbrowser angezeigt werden.

Geben Sie einen Buchstaben ein oder einen Wert, bei dem es sich nicht um einen Ganzzahlwert handelt, um die Funktionsweise der Fehlerbehandlung zu demonstrieren.

<!-- #Include file="ADOVBS.INC" -->
<% Language = VBScript %>
<HTML><HEAD>
<TITLE>ADO Move-Methoden</TITLE></HEAD>
<BODY>
<FONT FACE="MS SANS SERIF" SIZE=2>
<Center>
<H3>ADO Move-Methoden</H3>

<%
 ' Erstellen und Öffnen eines Connection-Objekts.
Set OBJdbConnection = Server.CreateObject("ADODB.Connection")
OBJdbConnection.Open "AdvWorks"
' Erstellen und Öffnen eines Recordset-Objekts.
Set RsCustomerList = Server.CreateObject("ADODB.Recordset")
RsCustomerList.ActiveConnection = OBJdbConnection
RsCustomerList.CursorType = adOpenKeyset
RsCustomerList.LockType = adLockOptimistic
RsCustomerList.Source = "Customers"

RsCustomerList.Open

 'Überprüfen der Anzahl der Benutzerbewegungen in dieser Sitzung,
 'Erhöhen um Wert im Form-Objekt.
Session("Clicks") = Session("Clicks") + Request.Form("MoveAmount")
Clicks = Session("Clicks")
' Wechseln zur letzten bekannten Position im Recordset ' plus dem durch die Form Post-Methode übergebenen Wert.
RsCustomerList.Move CInt(Clicks)

'Fehlerbehandlung
    If RsCustomerList.EOF Then
            Session("Clicks") = RsCustomerList.RecordCount
            Response.Write "This is the Last Record"
            RsCustomerList.MoveLast
        Else If RsCustomerList.BOF Then
            Session("Clicks") = 1
            RsCustomerList.MoveFirst
            Response.Write "This is the First Record"
        End If
    End If

%>

<H3>Aktuelle Datensatzanzahl ist <BR>
<% If Session("Clicks") = 0 Then
Session("Clicks") = 1
End If
Response.Write(Session("Clicks") )%> of <%=RsCustomerList.RecordCount%></H3>
<HR>

<Center><TABLE COLSPAN=8 CELLPADDING=5 BORDER=0>

<!-- BEGIN Spaltenkopfzeile für Customer-Tabelle -->

<TR>

<TD ALIGN=CENTER BGCOLOR="#008080">
<FONT STYLE="ARIAL NARROW" COLOR="#ffffff" SIZE=1>Company Name</FONT>
</TD>
<TD ALIGN=CENTER BGCOLOR="#008080">
<FONT STYLE="ARIAL NARROW" COLOR="#ffffff" SIZE=1>Contact Name</FONT>
</TD>
<TD ALIGN=CENTER WIDTH=150 BGCOLOR="#008080">
<FONT STYLE="ARIAL NARROW" COLOR="#ffffff" SIZE=1>Phone Number</FONT>
</TD>
<TD ALIGN=CENTER BGCOLOR="#008080">
<FONT STYLE="ARIAL NARROW" COLOR="#ffffff" SIZE=1>City</FONT>
</TD>
<TD ALIGN=CENTER BGCOLOR="#008080">
<FONT STYLE="ARIAL NARROW" COLOR="#ffffff" SIZE=1>State/Province</FONT>
</TD>

</TR>

<!-- Anzeigen von ADO-Daten aus der Customer-Tabelle -->

  <TR>
  <TD BGCOLOR="f7efde" ALIGN=CENTER>
  <FONT STYLE="ARIAL NARROW" SIZE=1>
  <%= RSCustomerList("CompanyName")%>
  </FONT></TD>
  <TD BGCOLOR="f7efde" ALIGN=CENTER>
  <FONT STYLE="ARIAL NARROW" SIZE=1>
  <%= RScustomerList("ContactLastName") & ", " %>
  <%= RScustomerList("ContactFirstName") %>
  </FONT></TD>
  <TD BGCOLOR="f7efde" ALIGN=CENTER>
  <FONT STYLE="ARIAL NARROW" SIZE=1>

  <%= RScustomerList("PhoneNumber")%>
 </FONT></TD>
  <TD BGCOLOR="f7efde" ALIGN=CENTER>
  <FONT STYLE="ARIAL NARROW" SIZE=1>
  <%= RScustomerList("City")%>
  </FONT></TD>
  <TD BGCOLOR="f7efde" ALIGN=CENTER>
  <FONT STYLE="ARIAL NARROW" SIZE=1>
  <%= RScustomerList("StateOrProvince")%>
  </FONT></TD>
  </TR> </Table></FONT>

<HR>
<Input Type = Button Name = cmdDown  Value = "<  ">
<Input Type = Button Name = cmdUp Value = "  >">
<H5>Klicken Sie auf die Richtungspfeile, um den vorhergehenden bzw. nächsten Datensatz anzuzeigen
<BR> Klicken Sie auf Anzahl verschieben, um die Move-Methode zu verwenden.
Geben Sie die Anzahl der zu verschiebenden Datensätze ein: + oder - </H5>

<Table>

<Form Method = Post Action="Move.asp" Name=Form>

<TR><TD><Input Type="Button" Name = Move Value="Move Amount "></TD><TD></TD><TD>
<Input Type="Text" Size="4" Name="MoveAmount" Value = 0></TD><TR>
</Form></Table></Center>

</BODY>

<Script Language = "VBScript">

Sub Move_OnClick
' Sicherstellen, dass es sich bei dem eingegebenen Wert um eine Ganzzahl handelt.
If IsNumeric(Document.Form.MoveAmount.Value)Then
    Document.Form.MoveAmount.Value = CInt(Document.Form.MoveAmount.Value)
    Document.Form.Submit
Else
    MsgBox "Sie müssen eine Zahl eingeben", ,"ADO-ASP Example"
    Document.Form.MoveAmount.Value = 0
End If

End Sub

Sub cmdDown_OnClick

Document.Form.MoveAmount.Value = -1
Document.Form.Submit

End Sub

Sub cmdUp_OnClick

Document.Form.MoveAmount.Value = 1
Document.Form.Submit

End Sub

</Script>
</HTML>


Beispiel für die Methoden MoveFirst, MoveLast, MoveNext und MovePrevious

In diesem Beispiel werden die Methoden MoveFirst, MoveLast, MoveNext und MovePrevious verwendet, um den Datensatzzeiger eines Recordset-Objekts auf der Grundlage des übermittelten Befehls zu verschieben. Die MoveAny-Prozedur ist erforderlich, damit diese Prozedur ausgeführt werden kann.

Public Sub MoveFirstX()

    Dim rstAuthors As ADODB.Recordset
    Dim strCnn As String
    Dim strMessage As String
    Dim intCommand As Integer

    ' Öffnen eines Recordsets aus der Authors-Tabelle.
        strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"
    Set rstAuthors = New ADODB.Recordset
    rstAuthors.CursorType = adOpenStatic
    ' Aktivieren der AbsolutePosition-Eigenschaft mit Clientcursor.
    rstAuthors.CursorLocation = adUseClient
    rstAuthors.Open "authors", strCnn, , , adCmdTable

    ' Anzeigen der aktuellen Datensatzinformationen und Abrufen der ausgewählten Methode.
    Do While True

        strMessage = "Name: " & rstAuthors!au_fName & " " & _
            rstAuthors!au_lName & vbCr & "Record " & _
            rstAuthors.AbsolutePosition & " of " & _
            rstAuthors.RecordCount & vbCr & vbCr & _
            "[1 - MoveFirst, 2 - MoveLast, " & vbCr & _
            "3 - MoveNext, 4 - MovePrevious]"
        intCommand = Val(Left(InputBox(strMessage), 1))
        If intCommand < 1 Or intCommand > 4 Then Exit Do

        ' Aufrufen der Methode basierend auf der Benutzereingabe.
        MoveAny intCommand, rstAuthors
    Loop
    rstAuthors.Close

End Sub

Public Sub MoveAny(intChoice As Integer, _
    rstTemp As Recordset)

    ' Verwenden der angegebenen Methode, Auffangen von Fehlern für die BOF- und EOF-Eigenschaft.
    Select Case intChoice
        Case 1
            rstTemp.MoveFirst
        Case 2
            rstTemp.MoveLast
        Case 3
            rstTemp.MoveNext
            If rstTemp.EOF Then
                MsgBox "Ende des Recordset erreicht!"
                rstTemp.MoveLast
            End If
        Case 4
            rstTemp.MovePrevious
            If rstTemp.BOF Then
                MsgBox "Anfang des Recordset erreicht!"
                rstTemp.MoveFirst
            End If
    End Select

End Sub

VBScript-Version

Bei folgendem Beispiel handelt es sich um das gleiche Beispiel, diesmal jedoch in VBScript für die Verwendung in einer Active Server Page (ASP) erstellt. Um sich dieses voll funktionsfähige Beispiel ansehen zu können, müssen Sie einen System-DSN (Data Source Name) erstellen.Diesen erstellen Sie unter Verwendung der mit IIS installierten und unter C:\InetPub\ASPSamp\AdvWorks gespeicherten Datenquelle AdvWorks.mdb. Es handelt sich hierbei um eine Datenbankdatei von Microsoft Access. Verwenden Sie den Befehl Suchen, um die Datei Adovbs.inc zu suchen, und verschieben Sie sie in das zu verwendende Verzeichnis. Schneiden Sie den folgenden Code aus, fügen Sie ihn in einem beliebigen Texteditor wieder ein, und speichern Sie ihn unter dem Dateinamen MoveOne.asp. Das Ergebnis kann in jedem Clientbrowser angezeigt werden.

Bewegen Sie sich über die obere oder untere Grenze des Recordsets hinaus, um die Funktionsweise der Fehlerbehandlung zu demonstrieren.

<!-- #Include file="ADOVBS.INC" -->
<% Language = VBScript %>
<HTML><HEAD>
<TITLE>ADO-Methoden MoveNext, MovePrevious, MoveLast, MoveFirst</TITLE></HEAD>
<BODY>
<FONT FACE="MS SANS SERIF" SIZE=2>
<Center>
<H3>ADO-Methoden<BR>MoveNext, MovePrevious, MoveLast, MoveFirst</H3>
<!-- Erstellen von Connection- und Recordset-Objekten auf dem Server -->
<%
 ' Erstellen und Öffnen eines Connection-Objekts.
Set OBJdbConnection = Server.CreateObject("ADODB.Connection")
OBJdbConnection.Open "AdvWorks"
' Erstellen und Öffnen eines Recordset-Objekts.
Set RsCustomerList = Server.CreateObject("ADODB.Recordset")
RsCustomerList.ActiveConnection = OBJdbConnection
RsCustomerList.CursorType = adOpenKeyset
RsCustomerList.LockType = adLockOptimistic
RsCustomerList.Source = "Customers"

RsCustomerList.Open

' Überprüfen der Request.Form-Auflistung, um festzustellen, ob Bewegungen aufgezeichnet wurden.

If Not IsEmpty(Request.Form("MoveAmount")) Then
' Verfolgen der Anzahl und Richtung der Bewegungen dieser Sitzung.

    Session("Moves") = Session("Moves") + Request.Form("MoveAmount")

    Clicks = Session("Moves")
'Wechseln zur letzten bekannten Position.
    RsCustomerList.Move CInt(Clicks)
' Überprüfen, ob es sich bei der Bewegung um + oder – handelt und ob Fehler vorliegen.
        If CInt(Request.Form("MoveAmount")) = 1 Then

            If RsCustomerList.EOF Then
                Session("Moves") = RsCustomerList.RecordCount
                RsCustomerList.MoveLast
            End If

            RsCustomerList.MoveNext
        End If

        If Request.Form("MoveAmount") < 1 Then

            RsCustomerList.MovePrevious
        End If
' Überprüfen, ob auf die Befehlsschaltfläche First Record oder Last Record geklickt wurde.
        If Request.Form("MoveLast") = 3 Then
            RsCustomerList.MoveLast
            Session("Moves") = RsCustomerList.RecordCount
        End If
        If Request.Form("MoveFirst") = 2 Then
            RsCustomerList.MoveFirst
            Session("Moves") = 1
        End If

End If
' Fehlerüberprüfung für Kombinationen der zum Bewegen verwendeten Schaltflächen
        If RsCustomerList.EOF Then
            Session("Moves") = RsCustomerList.RecordCount
            RsCustomerList.MoveLast
            Response.Write "This is the Last Record"
            End If

        If RsCustomerList.BOF Then
            Session("Moves") = 1
            RsCustomerList.MoveFirst
            Response.Write "This is the First Record"
        End If

%>

<H3>Aktuelle Datensatzanzahl ist <BR>
<!-- Anzeigen der aktuellen Datensatzanzahl und der Größe des Recordset-Objekts -->
<% If IsEmpty(Session("Moves"))  Then
Session("Moves") = 1
End If
%>

<%Response.Write(Session("Moves") )%> of <%=RsCustomerList.RecordCount%></H3>
<HR>

<Center><TABLE COLSPAN=8 CELLPADDING=5 BORDER=0>

<!-- BEGIN Spaltenkopfzeile für Customer-Tabelle -->

<TR><TD ALIGN=CENTER BGCOLOR="#008080">
<FONT STYLE="ARIAL NARROW" COLOR="#ffffff" SIZE=1>Company Name</FONT>
</TD>
<TD ALIGN=CENTER BGCOLOR="#008080">
<FONT STYLE="ARIAL NARROW" COLOR="#ffffff" SIZE=1>Contact Name</FONT>
</TD>
<TD ALIGN=CENTER WIDTH=150 BGCOLOR="#008080">
<FONT STYLE="ARIAL NARROW" COLOR="#ffffff" SIZE=1>Phone Number</FONT>
</TD>
<TD ALIGN=CENTER BGCOLOR="#008080">
<FONT STYLE="ARIAL NARROW" COLOR="#ffffff" SIZE=1>City</FONT>
</TD>
<TD ALIGN=CENTER BGCOLOR="#008080">
<FONT STYLE="ARIAL NARROW" COLOR="#ffffff" SIZE=1>State/Province</FONT>
</TD></TR>

<!-- Anzeigen von ADO-Daten aus der Customer-Tabelle -->

  <TR>
  <TD BGCOLOR="f7efde" ALIGN=CENTER>
  <FONT STYLE="ARIAL NARROW" SIZE=1>
  <%= RSCustomerList("CompanyName")%>
  </FONT></TD>
  <TD BGCOLOR="f7efde" ALIGN=CENTER>
  <FONT STYLE="ARIAL NARROW" SIZE=1>
  <%= RScustomerList("ContactLastName") & ", " %>
  <%= RScustomerList("ContactFirstName") %>
  </FONT></TD>
  <TD BGCOLOR="f7efde" ALIGN=CENTER>
  <FONT STYLE="ARIAL NARROW" SIZE=1>

  <%= RScustomerList("PhoneNumber")%>
 </FONT></TD>
  <TD BGCOLOR="f7efde" ALIGN=CENTER>
  <FONT STYLE="ARIAL NARROW" SIZE=1>
  <%= RScustomerList("City")%>
  </FONT></TD>
  <TD BGCOLOR="f7efde" ALIGN=CENTER>
  <FONT STYLE="ARIAL NARROW" SIZE=1>
  <%= RScustomerList("StateOrProvince")%>
  </FONT></TD>
  </TR> </Table></FONT>

<HR>
<Input Type = Button Name = cmdDown  Value = "<  ">
<Input Type = Button Name = cmdUp Value = "  >">
<BR>
<Input Type = Button Name = cmdFirst Value = "First Record">

<Input Type = Button Name = cmdLast Value = "Last Record">
<H5>Klicken Sie auf die Richtungspfeile, um MovePrevious bzw. MoveNext zu verwenden
<BR> </H5>

<!-- Verwendung verborgener Felder des Form-Objekts zum Senden von Werten an den Server -->

<Form Method = Post Action="MoveOne.asp" Name=Form>
<Input Type="Hidden" Size="4" Name="MoveAmount" Value = 0>
<Input Type="Hidden" Size="4" Name="MoveLast" Value = 0>
<Input Type="Hidden" Size="4" Name="MoveFirst" Value = 0>
</Form></BODY>

<Script Language = "VBScript">

Sub cmdDown_OnClick
' Festlegen von Werten in den Eingabefeldern des Form-Objekts und Übermitteln des Form-Objekts.
    Document.Form.MoveAmount.Value = -1
    Document.Form.Submit
End Sub

Sub cmdUp_OnClick

    Document.Form.MoveAmount.Value = 1
    Document.Form.Submit

End Sub

Sub cmdFirst_OnClick

    Document.Form.MoveFirst.Value = 2
    Document.Form.Submit

End Sub

Sub cmdLast_OnClick

    Document.Form.MoveLast.Value = 3
    Document.Form.Submit

End Sub
</Script></HTML>


Beispiel für die NextRecordset-Methode

In diesem Beispiel werden die Daten eines Recordsets mit Hilfe der NextRecordset-Methode demonstriert. Im Recordset wird eine Verbundbefehlsanweisung verwendet, die aus drei einzelnen SELECT-Anweisungen besteht.

Public Sub NextRecordsetX()

    Dim rstCompound As ADODB.Recordset
    Dim strCnn As String
    Dim intCount As Integer

    ' Öffnen eines Verbund-Recordsets.
        strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"

    Set rstCompound = New ADODB.Recordset
    rstCompound.Open "SELECT * FROM authors; " & _
        "SELECT * FROM stores; " & _
        "SELECT * FROM jobs", strCnn, , , adCmdText

    ' Anzeigen der Ergebnisse der einzelnen SELECT-Anweisungen.
    intCount = 1
    Do Until rstCompound Is Nothing
        Debug.Print "Inhalt des Recordset Nr. " & intCount
        Do While Not rstCompound.EOF
            Debug.Print , rstCompound.Fields(0), _
                rstCompound.Fields(1)
            rstCompound.MoveNext
        Loop

        Set rstCompound = rstCompound.NextRecordset
        intCount = intCount + 1
    Loop

End Sub


Beispiel für die Methoden Open und Close

In diesem Beispiel werden die Methoden Open und Close in geöffneten Recordset- und geöffneten Connection-Objekten verwendet.

Public Sub OpenX()

    Dim cnn1 As ADODB.Connection
    Dim rstEmployees As ADODB.Recordset
    Dim strCnn As String
    Dim varDate As Variant

    ' Öffnen der Verbindung.
        strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"
    Set cnn1 = New ADODB.Connection
    cnn1.Open strCnn

    ' Öffnen der Employee-Tabelle.
    Set rstEmployees = New ADODB.Recordset
    rstEmployees.CursorType = adOpenKeyset
    rstEmployees.LockType = adLockOptimistic
    rstEmployees.Open "employee", cnn1, , , adCmdTable

    ' Zuweisen des Einstellungsdatums für den Datensatz des ersten Mitarbeiters zu einer Variablen, anschließend Ändern des Einstellungsdatums.
    varDate = rstEmployees!hire_date
    Debug.Print "Originaldaten"
    Debug.Print "  Name - Einstellungsdatum"
    Debug.Print "  " & rstEmployees!fName & " " & _
        rstEmployees!lName & " - " & rstEmployees!hire_date
    rstEmployees!hire_date = #1/1/1990#
    rstEmployees.Update
    Debug.Print "Daten geändert"
    Debug.Print "  Name - Einstellungsdatum"
    Debug.Print "  " & rstEmployees!fName & " " & _
        rstEmployees!lName & " - " & rstEmployees!hire_date

    ' Erneutes Abfragen des Recordset-Objekts und Zurücksetzen des ' Einstellungsdatums.
    rstEmployees.Requery
    rstEmployees!hire_date = varDate
    rstEmployees.Update
    Debug.Print "Data after reset"
    Debug.Print "  Name - Einstellungsdatum"
    Debug.Print "  " & rstEmployees!fName & " " & _
        rstEmployees!lName & " - " & rstEmployees!hire_date

    rstEmployees.Close
    cnn1.Close

End Sub

VBScript-Version

Bei folgendem Beispiel handelt es sich um das gleiche Beispiel, diesmal jedoch in VBScript für die Verwendung in einer Active Server Page (ASP) erstellt. Um sich dieses voll funktionsfähige Beispiel ansehen zu können, müssen Sie einen System-DSN (Data Source Name) erstellen.Diesen erstellen Sie unter Verwendung der mit IIS installierten und unter C:\InetPub\ASPSamp\AdvWorks gespeicherten Datenquelle AdvWorks.mdb. Es handelt sich hierbei um eine Datenbankdatei von Microsoft Access. Verwenden Sie den Befehl Suchen, um die Datei Adovbs.inc zu suchen, und verschieben Sie sie in das zu verwendende Verzeichnis. Schneiden Sie den folgenden Code aus, fügen Sie ihn in einem beliebigen Texteditor wieder ein, und speichern Sie ihn unter dem Dateinamen ADOOpen.asp. Das Ergebnis kann in jedem Clientbrowser angezeigt werden.

<!-- #Include file="ADOVBS.INC" -->
<HTML><HEAD>
<TITLE>ADO Open-Methode</TITLE>
</HEAD><BODY>
<FONT FACE="MS SANS SERIF" SIZE=2>
<Center><H3>ADO Open-Methode</H3>
<TABLE WIDTH=600 BORDER=0>
<TD VALIGN=TOP ALIGN=LEFT COLSPAN=3><FONT SIZE=2>
<!--- Verwenden eines ADO Connection-Objekts zum Erstellen von 2 Recordsets -->
<%
Set OBJdbConnection = Server.CreateObject("ADODB.Connection")
OBJdbConnection.Open "AdvWorks"
SQLQuery = "SELECT * FROM Customers"
' Erstes Recordset-Objekt RSCustomerList.
Set RSCustomerList = OBJdbConnection.Execute(SQLQuery)
' Zweites Recordset-Objekt RsProductList.
Set RsProductList = Server.CreateObject("ADODB.Recordset")
RsProductList.CursorType = adOpenDynamic
RsProductList.LockType = adLockOptimistic
RsProductList.Open "Products", OBJdbConnection
%>
<TABLE COLSPAN=8 CELLPADDING=5 BORDER=0>

<!-- BEGIN Spaltenkopfzeile für Customer-Tabelle -->

<TR><TD ALIGN=CENTER BGCOLOR="#008080">
<FONT STYLE="ARIAL NARROW" COLOR="#ffffff" SIZE=1>Company Name</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#008080">
<FONT STYLE="ARIAL NARROW" COLOR="#ffffff" SIZE=1>Contact Name</FONT></TD>
<TD ALIGN=CENTER WIDTH=150 BGCOLOR="#008080">
<FONT STYLE="ARIAL NARROW" COLOR="#ffffff" SIZE=1>E-mail address</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#008080">
<FONT STYLE="ARIAL NARROW" COLOR="#ffffff" SIZE=1>City</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#008080">
<FONT STYLE="ARIAL NARROW" COLOR="#ffffff" SIZE=1>State/Province</FONT></TD></TR>

<!-- Anzeigen von ADO-Daten aus der Customer-Tabelle -->
<% Do While Not RScustomerList.EOF %>
  <TR><TD BGCOLOR="f7efde" ALIGN=CENTER>
  <FONT STYLE="ARIAL NARROW" SIZE=1>
  <%= RSCustomerList("CompanyName")%>
  </FONT></TD>
  <TD BGCOLOR="f7efde" ALIGN=CENTER>
  <FONT STYLE="ARIAL NARROW" SIZE=1>
  <%= RScustomerList("ContactLastName") & ", " %>
  <%= RScustomerList("ContactFirstName") %>
  </FONT></TD>
  <TD BGCOLOR="f7efde" ALIGN=CENTER>
  <FONT STYLE="ARIAL NARROW" SIZE=1>
  <%= RScustomerList("ContactLastName")%>
 </FONT></TD>
  <TD BGCOLOR="f7efde" ALIGN=CENTER>
  <FONT STYLE="ARIAL NARROW" SIZE=1>
  <%= RScustomerList("City")%>
  </FONT></TD>
  <TD BGCOLOR="f7efde" ALIGN=CENTER>
  <FONT STYLE="ARIAL NARROW" SIZE=1>
  <%= RScustomerList("StateOrProvince")%>
  </FONT></TD></TR>
<!-Nächste Zeile = Datensatzschleife und Hinzufügen zu HTML-Tabelle -->
<%
RScustomerList.MoveNext
Loop
RScustomerList.Close
OBJdbConnection.Close
%>
</TABLE>
<HR>
<TABLE COLSPAN=8 CELLPADDING=5 BORDER=0>

<!-- BEGIN Spaltenkopfzeile für Products-Tabelle -->

<TR><TD ALIGN=CENTER BGCOLOR="#800000">
<FONT STYLE="ARIAL NARROW" COLOR="#ffffff" SIZE=1>Product Type</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000">
<FONT STYLE="ARIAL NARROW" COLOR="#ffffff" SIZE=1>Product Name</FONT></TD>
<TD ALIGN=CENTER WIDTH=350 BGCOLOR="#800000">
<FONT STYLE="ARIAL NARROW" COLOR="#ffffff" SIZE=1>Product Description</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000">
<FONT STYLE="ARIAL NARROW" COLOR="#ffffff" SIZE=1>Unit Price</FONT></TD></TR>
<!-- Anzeigen der Products-Tabelle -->
<% Do While Not RsProductList.EOF %>
  <TR>  <TD BGCOLOR="f7efde" ALIGN=CENTER>
  <FONT STYLE="ARIAL NARROW" SIZE=1>
  <%= RsProductList("ProductType")%>
  </FONT></TD>
  <TD BGCOLOR="f7efde" ALIGN=CENTER>
  <FONT STYLE="ARIAL NARROW" SIZE=1>
  <%= RsProductList("ProductName")%>
  </FONT></TD>
  <TD BGCOLOR="f7efde" ALIGN=CENTER>
  <FONT STYLE="ARIAL NARROW" SIZE=1>
   <%= RsProductList("ProductDescription")%>
 </FONT></TD>
  <TD BGCOLOR="f7efde" ALIGN=CENTER>
  <FONT STYLE="ARIAL NARROW" SIZE=1>
  <%= RsProductList("UnitPrice")%>
  </FONT></TD>

<!-- Nächste Zeile = Datensatz -->
<%
RsProductList.MoveNext
Loop
' Entfernen von Objekten aus dem Speicher, um Ressourcen wieder frei ' zu geben.
Set RsProductList = Nothing
Set OBJdbConnection = Nothing
%>
</TABLE></FONT></Center></BODY></HTML>


Beispiel für die OpenSchema-Methode

In diesem Beispiel wird die OpenSchema-Methode zum Anzeigen der einzelnen Tabellennamen und -typen in der Pubs-Datenbank verwendet.

Public Sub OpenSchemaX()

    Dim cnn1 As ADODB.Connection
    Dim rstSchema As ADODB.Recordset
    Dim strCnn As String

    Set cnn1 = New ADODB.Connection
        strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"
    cnn1.Open strCnn

    Set rstSchema = cnn1.OpenSchema(adSchemaTables)

    Do Until rstSchema.EOF
        Debug.Print "Tabellenname: " & _
            rstSchema!TABLE_NAME & vbCr & _
            "Tabellentyp: " & rstSchema!TABLE_TYPE & vbCr
        rstSchema.MoveNext
    Loop
    rstSchema.Close

    cnn1.Close

End Sub

Im folgenden Beispiel wird die Abfragebeschränkung TABLE_TYPE im Criteria-Argument der OpenSchema-Methode festgelegt. Aufgrund dessen werden nur Schemainformationen für die Ansichten, die in der Pubs-Datenbank angegeben werden, zurückgegeben. Das Beispiel zeigt dann Namen und Typ(en) dieser Tabelle(n) an.

Public Sub OpenSchemaX2()

    Dim cnn2 As ADODB.Connection
    Dim rstSchema As ADODB.Recordset
    Dim strCnn As String

    Set cnn2 = New ADODB.Connection
        strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"
    cnn2.Open strCnn

    Set rstSchema = cnn2.OpenSchema(adSchemaTables, Array(Empty, Empty, Empty, "VIEW"))

        Do Until rstSchema.EOF
            Debug.Print "Tabellenname: " & _
                rstSchema!TABLE_NAME & vbCr & _
                "Tabellentyp: " & rstSchema!TABLE_TYPE & vbCr
            rstSchema.MoveNext
        Loop
    rstSchema.Close

    cnn2.Close

End Sub


Beispiel für die Refresh-Methode (Visual Basic)

In diesem Beispiel wird die Verwendung der Refresh-Methode zum Aktualisieren der Parameters-Auflistung für das Command-Objekt einer gespeicherten Prozedur demonstriert.

Public Sub RefreshX()

    Dim cnn1 As ADODB.Connection
    Dim cmdByRoyalty As ADODB.Command
    Dim rstByRoyalty As ADODB.Recordset
    Dim rstAuthors As ADODB.Recordset
    Dim intRoyalty As Integer
    Dim strAuthorID As String
    Dim strCnn As String

    ' Öffnen der Verbindung.
    Set cnn1 = New ADODB.Connection
        strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"
    cnn1.Open strCnn

    ' Öffnen eines Command-Objekts für eine gespeicherte Prozedur
    ' mit einem Parameter.
    Set cmdByRoyalty = New ADODB.Command
    Set cmdByRoyalty.ActiveConnection = cnn1
    cmdByRoyalty.CommandText = "byroyalty"
    cmdByRoyalty.CommandType = adCmdStoredProc
    cmdByRoyalty.Parameters.Refresh

    ' Abrufen des Parameterwertes und Ausführen des Befehls,
    ' Speichern der Ergebnisse in einem Recordset.
    intRoyalty = Trim(InputBox("Enter royalty:"))
    cmdByRoyalty.Parameters(1) = intRoyalty
    Set rstByRoyalty = cmdByRoyalty.Execute()

    ' Öffnen der Authors-Tabelle, um Verfassernamen anzuzeigen.
    Set rstAuthors = New ADODB.Recordset
    rstAuthors.Open "authors", cnn1, , , adCmdTable

    ' Drucken der aktuellen Daten im Recordset, Hinzufügen der
    ' Verfassernamen der Authors-Tabelle.
    Debug.Print "Verfasser mit " & intRoyalty & " Prozent Tantiemen"
    Do While Not rstByRoyalty.EOF
        strAuthorID = rstByRoyalty!au_id
        Debug.Print "    " & rstByRoyalty!au_id & ", ";
        rstAuthors.Filter = "au_id = '" & strAuthorID & "'"
        Debug.Print rstAuthors!au_fname & " " & _
            rstAuthors!au_lname
        rstByRoyalty.MoveNext
    Loop

    rstByRoyalty.Close
    rstAuthors.Close
    cnn1.Close

End Sub


Beispiel für die Refresh-Methode (VBScript)

Im folgenden Beispiel wird gezeigt, wie die erforderlichen Parameter von RDS.DataControl während der Laufzeit gesetzt werden. Die Art und Weise, wie ein Recordset-Objekt unter Verwendung der Refresh-Methode abgerufen wird, wird durch die Einstellungen der ExecuteOptions- und FetchOptions-Eigenschaften bestimmt. Schneiden Sie zum Testen dieses Beispiels den Code aus und fügen Sie ihn zwischen den Tags <BODY> und </BODY> eines einfachen HTML-Dokuments ein, dem Sie die Bezeichnung ADCapi2.asp geben. ASP-Skript erkennt Ihren Server.

<HTML>
<HEAD>
<TITLE>Refresh / ExecuteOptions</TITLE>
</HEAD>
<BODY>
<Center><H2>RDS API-Codebeispiele </H2>
<HR>
<Object CLASSID="clsid:AC05DC80-7DF1-11d0-839E-00A024A94B3A"
    CODEBASE="http://<%=Request.ServerVariables("SERVER_NAME")%>/MSADC/Samples/Sheridan.cab"
    ID=GRID1
        datasrc=#ADC
        HEIGHT=125
        WIDTH=495>
    <PARAM NAME="AllowAddNew" VALUE="TRUE">
    <PARAM NAME="AllowDelete" VALUE="TRUE">
    <PARAM NAME="AllowUpdate" VALUE="TRUE">
    <PARAM NAME="Caption" VALUE="Remote Data Service Run Time">
</OBJECT>
<!-- RDS.DataControl with no parameters set at design time -->
<OBJECT classid="clsid:BD96C556-65A3-11D0-983A-00C04FC29E33"
    ID=ADC>
    </OBJECT>
<HR>
<Input Size=70 Name="txtServer" Value="http://<%=Request.ServerVariables("SERVER_NAME")%>"><BR>
<Input Size=70 Name="txtConnect" Value = "dsn=ADCDemo;UID=ADCDemo;PWD=ADCDemo;"><BR>
<Input Size=70 Name="txtSQL" Value="Select * from Employee">
<BR>
Wählen Sie: Möchten Sie, dass das Recordset synchron auf den aktuellen aufrufenden Thread oder asynchron auf einen anderen Thread zurückgeholt wird?
<Input Type="Radio" Name="optExecuteOptions" Checked OnClick="SetExO('adcExecSync')">
<Input Type="Radio" Name="optExecuteOptions"  OnClick="SetExO('adcExecAsync')"><BR>
Abrufen im Vordergrund, Abrufen im Hintergrund mit Blockieren oder Abrufen im Hintergrund ohne Blockieren
<Input Type="Radio" Name="optFetchOptions"  OnClick="SetFO('adcFetchUpFront')">
<Input Type="Radio" Name="optFetchOptions" Checked OnClick="SetFO('adcFetchBackground')">
<Input Type="Radio" Name="optFetchOptions"  OnClick="SetFO('adcFetchAsync')">

<HR>
<INPUT TYPE=BUTTON NAME="Run" VALUE="Run"><BR>
<H4>Füllen Sie das Daten-Steuerelement mit diesen Werten oder ändern Sie sie, um Daten aus einer anderen ODBC-Datenquellen auf dem Server zu sehen</H4>
</Center>
<Script Language="VBScript">
<!--
Dim EO             'ExecuteOptions
Dim FO            'FetchOptions
EO = "adcExecSync"    'Standardwert
FO = "adcFetchBackground"    'Standardwert
Sub SetExO(NewEO)
    EO = NewEO
End Sub
Sub SetFO(NewFO)
    FO = NewFO
End Sub

' Setzen der Parameter von RDS.DataControl während der Laufzeit
Sub Run_OnClick
    ADC.Server = txtServer.Value
    ADC.SQL = txtSQL.Value
    ADC.Connect = txtConnect.Value
If EO = "adcExecSync" Then        'Bestimmen der ausgewählten ExecuteOption.
    ADC.ExecuteOptions = adcExecSync
        MsgBox "Recordset wurde synchron auf den aktuellen aufrufenden Thread zurückgeholt"
Else
    ADC.ExecuteOptions = adcExecAsync
            MsgBox "Recordset wurde asynchron auf einen anderen Thread zurückgeholt"
End If

If FO = "adcFetchBackground" Then        'Bestimmen                                         'der ausgewählten FetchOption.
    ADC.FetchOptions = adcFetchBackground
        MsgBox "Steuerelement geht zurück an Benutzer, sobald erster Stapel von Datensätzen zurückgegeben wurde"
ElseIf FO = " adcFetchUpFront" Then
    ADC.FetchOptions = adcFetchUpFront
            MsgBox "Alle Datensätze wurden zurückgegeben, bevor Steuerelement zurück an Benutzer geht"
Else
    ADC.FetchOptions = adcFetchAsync
            MsgBox "Steuerelement geht unmittelbar zurück an Benutzer"
End If

ADC.Refresh

End Sub
-->
</Script>
</BODY>
</HTML>


Beispiel für die Resync-Methode

In diesem Beispiel wird die Verwendung der Resync-Methode zum Aktualisieren von Daten in einem statischen Recordset demonstriert.

Public Sub ResyncX()

    Dim strCnn As String
    Dim rstTitles As ADODB.Recordset

    ' Öffnen der Verbindungen.
        strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"

    ' Öffnen des Recordsets für die Titles-Tabelle.
    Set rstTitles = New ADODB.Recordset
    rstTitles.CursorType = adOpenStatic
    rstTitles.LockType = adLockBatchOptimistic
    rstTitles.Open "titles", strCnn, , , adCmdTable

    ' Ändern des Typs des ersten Titels im Recordset.
    rstTitles!Type = "database"

    ' Anzeigen der Ergebnisse der Änderung.
    MsgBox "Vor Resync: " & vbCr & vbCr & _
        "Title - " & rstTitles!Title & vbCr & _
        "Type - " & rstTitles!Type

    ' Ausführen der Resync-Methode in der Datenbank und erneutes Anzeigen ' der Ergebnisse.
    rstTitles.Resync
    MsgBox "Nach Resync: " & vbCr & vbCr & _
        "Title - " & rstTitles!Title & vbCr & _
        "Type - " & rstTitles!Type

    rstTitles.CancelBatch
    rstTitles.Close

End Sub


Beispiel für die SubmitChanges-Methode (VBScript)

Der folgende Code zeigt, wie die SubmitChanges-Methode mit einem RDS.DataControl-Objekt verwendet wird.

Um dieses Beispiel zu testen, schneiden Sie den Code aus und fügen ihn zwischen den Tags <BODY> und </BODY> in einem einfachen HTML-Dokument wieder ein, dem Sie die Bezeichnung ADCapi6.asp geben. ASP-Skript erkennt Ihren Server.

<Center><H2>RDS API-Codebeispiele </H2>
<HR>
<H3>Methoden SubmitChanges und CancelUpdate für Remote Data Service</H3>
<!-- RDS.DataControl with parameters set at design time -->
<OBJECT classid="clsid:BD96C556-65A3-11D0-983A-00C04FC29E33"
    ID=ADC>
    <PARAM NAME="SQL" VALUE="Select * from Employee for browse">
    <PARAM NAME="SERVER" VALUE="http://<%=Request.ServerVariables("SERVER_NAME")%>">
    <PARAM NAME="CONNECT" VALUE="dsn=ADCDemo;UID=ADCDemo;PWD=ADCDemo;"> </OBJECT>

<Object classid ="clsid:AC05DC80-7DF1-11d0-839E-00A024A94B3A"
    CODEBASE="http://<%=Request.ServerVariables("SERVER_NAME")%>/MSADC/Samples/Sheridan.cab"
    ID=GRID1

        datasrc=#ADC
        HEIGHT=125
        WIDTH=495>
    <PARAM NAME="AllowAddNew" VALUE="TRUE">
    <PARAM NAME="AllowDelete" VALUE="TRUE">
    <PARAM NAME="AllowUpdate" VALUE="TRUE">
    <PARAM NAME="Caption" VALUE="Remote Data Service Run Time">
</OBJECT>
<HR>
<INPUT TYPE=BUTTON NAME="SubmitChange" VALUE="Submit-Changes"><INPUT TYPE=BUTTON NAME="CancelChange" VALUE="Cancel-Update"><BR>
<H4>Fügen Sie eine neue Person hinzu oder ändern Sie einen aktuellen Eintrag in der Tabelle. Schieben Sie diese Zeile weg. <BR>
Übermitteln Sie die Änderungen an die DBMS oder brechen Sie die Aktualisierungen ab. </H4>
</Center>
<Script Language="VBScript">
<!--
' Setzen der Parameter von RDS.DataControl während der Laufzeit
Sub SubmitChange_OnClick
    ADC.SubmitChanges
    ADC.Refresh
End Sub

Sub CancelUpdate_OnClick
    ADC.CancelUpdate
End Sub
-->
</Script>

Das folgende Codefragment zeigt, wie die SubmitChanges-Methode mit einem RDSServer.DataFactory-Objekt verwendet wird. Möglicherweise ist es sinnvoll, Änderungen an das RDSServer.DataFactory-Objekt zu übergeben, wenn es sich um ein Projekt in Visual Basic handelt, bei dem das RDS.DataControl-Objekt nicht verwendet wird. Um dieses Projekt zu erstellen, öffnen Sie ein Visual Basic-Formular und platzieren Sie darauf ein Listenfeld (List1), zwei Textfelder (txtConnect und txtGetRecordset) sowie zwei Befehlsschaltflächen (cmdGetRecordset und cmdSubmitChanges).

Dim ads As Object    ' RDS.DataSpace-Objekt
Dim adf As Object    ' RDSServer.DataFactory-Objekt

Private Sub UserDocument_Initialize()
    Call Form_Load
End Sub

Private Sub Form_Load()
    txtConnect.Text = "Dsn=pubs;Uid=sa;Pwd=;"
    txtGetRecordset.Text = "Select au_lname from authors"
End Sub

Private Sub cmdGetRecordset_Click()
    Dim Server As String
    Server = "Svr" ' Geben Sie hier den Servernamen an

    ' Erstellen eines RDS.DataSpace-Objekts unter Verwendung der ' CreateObject-Methode des RDS.DataSpace-Objekts.
    Set ads = CreateObject("RDS.DataSpace")
    Set adf = ads.CreateObject("RDSServer.DataFactory", Server)

    ' Auffüllen des Listenfeldes mit dem Recordset-Objekt.
    MousePointer = vbHourglass
    Dim objADORs As Object
    Set objADORs = adf.Query(CStr(txtConnect.Text), CStr(txtGetRecordset.Text))
    List1.Clear
    While Not objADORs.EOF
        List1.AddItem objADORs(0).Value
        objADORs.MoveNext
    Wend
    MousePointer = vbNormal
End Sub
Sub cmdSubmitChanges_Click
    adf.SubmitChanges " Dsn=pubs;Uid=sa;Pwd=;",_
    objADORs
End Sub


Beispiel für die Supports-Methode

In diesem Beispiel wird die Supports-Methode zum Anzeigen der Optionen verwendet, die durch ein mit verschiedenen Cursortypen geöffnetes Recordset unterstützt werden. Um diese Prozedur ausführen zu können, ist die DisplaySupport-Prozedur erforderlich.

Public Sub SupportsX()

    Dim aintCursorType(4) As Integer
    Dim rstTitles As ADODB.Recordset
    Dim strCnn As String
    Dim intIndex As Integer

    ' Öffnen der Verbindungen.
        strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"

    ' Füllen des Arrays mit CursorType-Konstanten.
    aintCursorType(0) = adOpenForwardOnly
    aintCursorType(1) = adOpenKeyset
    aintCursorType(2) = adOpenDynamic
    aintCursorType(3) = adOpenStatic

    ' Öffnen des Recordsets unter Verwendung
    ' einer Teilsperre. Dann Aufrufen der
    ' DisplaySupport-Prozedur zum Anzeigen der unterstützten Optionen.
    For intIndex = 0 To 3
        Set rstTitles = New ADODB.Recordset
        rstTitles.CursorType = aintCursorType(intIndex)
        rstTitles.LockType = adLockOptimistic
        rstTitles.Open "titles", strCnn, , , adCmdTable

        Select Case aintCursorType(intIndex)
            Case adOpenForwardOnly
                Debug.Print "ForwardOnly cursor supports:"
            Case adOpenKeyset
                Debug.Print "Cursor vom Typ Schlüselgruppe unterstützt:"
            Case adOpenDynamic
                Debug.Print "Dynamischer Cursor unterstützt:"
            Case adOpenStatic
                Debug.Print "Statischer Cursor unterstützt:"
        End Select

        DisplaySupport rstTitles
        rstTitles.Close
    Next intIndex

End Sub

Public Sub DisplaySupport(rstTemp As ADODB.Recordset)

    Dim alngConstants(11) As Long
    Dim booSupports As Boolean
    Dim intIndex As Integer

    ' Füllen des Arrays mit Konstanten für die Cursoroptionen.
    alngConstants(0) = adAddNew
    alngConstants(1) = adApproxPosition
    alngConstants(2) = adBookmark
    alngConstants(3) = adDelete
    alngConstants(4) = adFind
    alngConstants(5) = adHoldRecords
    alngConstants(6) = adMovePrevious
    alngConstants(7) = adNotify
    alngConstants(8) = adResync
    alngConstants(9) = adUpdate
    alngConstants(10) = adUpdateBatch

    For intIndex = 0 To 10
        booSupports = _
            rstTemp.Supports(alngConstants(intIndex))
        If booSupports Then
            Select Case alngConstants(intIndex)
                Case adAddNew
                    Debug.Print "   AddNew"
                Case adApproxPosition
                    Debug.Print "   AbsolutePosition und AbsolutePage"
                Case adBookmark
                    Debug.Print "   Lesezeichen"
                Case adDelete
                    Debug.Print "   Löschen"
                Case adFind
                    Debug.Print "   Suchen"
                Case adHoldRecords
                    Debug.Print "   Datensätze werden bereitgehalten"
                Case adMovePrevious
                    Debug.Print "   MovePrevious und Move"
                Case adNotify
                    Debug.Print "   Benachrichtigungen"
                Case adResync
                    Debug.Print "   Daten werden neu synchronisiert"
                Case adUpdate
                    Debug.Print "   Update"
                Case adUpdateBatch
                    Debug.Print "   Stapelaktualisierungen"
            End Select
        End If
    Next intIndex

End Sub


Beispiel für die Methoden Update und CancelUpdate

In diesem Beispiel wird die Verwendung der Update-Methode in Verbindung mit der CancelUpdate-Methode demonstriert.

Public Sub UpdateX()

    Dim rstEmployees As ADODB.Recordset
    Dim strOldFirst As String
    Dim strOldLast As String
    Dim strMessage As String

    ' Öffnen des Recordset mit Namen der Employee-Tabelle.
        strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"
    Set rstEmployees = New ADODB.Recordset
    rstEmployees.CursorType = adOpenKeyset
    rstEmployees.LockType = adLockOptimistic
    rstEmployees.Open "SELECT fname, lname " & _
        "FROM Employee ORDER BY lname", strCnn, , , adCmdText

    ' Speichern der ursprünglichen Daten.
    strOldFirst = rstEmployees!fname
    strOldLast = rstEmployees!lname
    ' Verändern der Daten im Bearbeitungspuffer.
    rstEmployees!fname = "Linda"
    rstEmployees!lname = "Kobara"

    ' Anzeigen des Inhalts des Puffers und Warten auf Benutzereingabe.
    strMessage = "Bearbeitung läuft:" & vbCr & _
        " Original data = " & strOldFirst & " " & _
        strOldLast & vbCr & " Data in buffer = " & _
        rstEmployees!fname & " " & rstEmployees!lname & vbCr & vbCr & _
        "Verwenden der Aktualisierung zum Ersetzen der ursprünglichen Daten " & _
        "durch die im Puffer vorhandenen Daten im Recordset?"

    If MsgBox(strMessage, vbYesNo) = vbYes Then
        rstEmployees.Update
    Else
        rstEmployees.CancelUpdate
    End If

    ' Anzeigen der resultierenden Daten.
    MsgBox "Daten im Recordset = " & rstEmployees!fname & " " & _
        rstEmployees!lname

    ' Wiederherstellen der ursprünglichen Daten, da dies ein Beispiel ist.
    If Not (strOldFirst = rstEmployees!fname And _
            strOldLast = rstEmployees!lname) Then
        rstEmployees!fname = strOldFirst
        rstEmployees!lname = strOldLast
        rstEmployees.Update
    End If

    rstEmployees.Close

End Sub

In diesem Beispiel wird die Verwendung der Update-Methode in Verbindung mit der AddNew-Methode demonstriert.

Public Sub UpdateX2()

    Dim cnn1 As ADODB.Connection
    Dim rstEmployees As ADODB.Recordset
    Dim strEmpID As String
    Dim strOldFirst As String
    Dim strOldLast As String
    Dim strMessage As String

    ' Öffnen einer Verbindung.
    Set cnn1 = New ADODB.Connection
        strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"
    cnn1.Open strCnn

    ' Öffnen eines Recordset mit Daten der Employees-Tabelle.
    Set rstEmployees = New ADODB.Recordset
    rstEmployees.CursorType = adOpenKeyset
    rstEmployees.LockType = adLockOptimistic
    rstEmployees.Open "employee", cnn1, , , adCmdTable

    rstEmployees.AddNew
    strEmpID = "B-S55555M"
    rstEmployees!emp_id = strEmpID
    rstEmployees!fname = "Bill"
    rstEmployees!lname = "Sornsin"

    ' Anzeigen des Inhalts des Puffers und Warten auf Benutzereingabe.
    strMessage = "AddNew in progress:" & vbCr & _
        "Data in buffer = " & rstEmployees!emp_id & ", " & _
        rstEmployees!fname & " " & rstEmployees!lname & vbCr & vbCr & _
        "Aktualisierung zum Speichern des Puffers im Recordset verwenden?"

    If MsgBox(strMessage, vbYesNoCancel) = vbYes Then
        rstEmployees.Update
        ' Wechseln zum nächsten Datensatz und Anzeigen der Ergebnisdaten.
        MsgBox "Data in recordset = " & rstEmployees!emp_id & ", " & _
             rstEmployees!fname & " " & rstEmployees!lname
    Else
        rstEmployees.CancelUpdate
        MsgBox "Es wurde kein neuer Datensatz hinzugefügt."
    End If

    ' Löschen der neuen Daten, da es sich um eine Demonstration handelt.
    cnn1.Execute "DELETE FROM employee WHERE emp_id = '" & strEmpID & "'"

    rstEmployees.Close

End Sub


Beispiel für die Methoden UpdateBatch und CancelBatch

In diesem Beispiel wird die Verwendung der UpdateBatch-Methode in Verbindung mit der CancelBatch-Methode demonstriert.

Public Sub UpdateBatchX()

    Dim rstTitles As ADODB.Recordset
    Dim strCnn As String
    Dim strTitle As String
    Dim strMessage As String

    ' Zuweisen einer Verbindungszeichenfolge zu einer Variablen.
        strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"

    Set rstTitles = New ADODB.Recordset
    rstTitles.CursorType = adOpenKeyset
    rstTitles.LockType = adLockBatchOptimistic
    rstTitles.Open "titles", strCnn, , , adCmdTable

    rstTitles.MoveFirst

    ' Durchlaufen des Recordsets in Form von Schleifen, und Fragen,
    ' ob Benutzer den Typ für einen angegebenen Titel ändern möchten.
    Do Until rstTitles.EOF
        If Trim(rstTitles!Type) = "psychology" Then
            strTitle = rstTitles!Title
            strMessage = "Title: " & strTitle & vbCr & _
                "Change type to self help?"

            If MsgBox(strMessage, vbYesNo) = vbYes Then
                rstTitles!Type = "self_help"
            End If
        End If

        rstTitles.MoveNext
    Loop

    ' Fragen, ob alle oben durchgeführten Änderungen
    ' übernommen werden sollen.
    If MsgBox("Alle Änderungen speichern?", vbYesNo) = vbYes Then
        rstTitles.UpdateBatch
    Else
        rstTitles.CancelBatch
    End If

    ' Drucken der aktuellen Daten des Recordset.
    rstTitles.Requery
    rstTitles.MoveFirst
    Do While Not rstTitles.EOF
        Debug.Print rstTitles!Title & " - " & rstTitles!Type
        rstTitles.MoveNext
    Loop

    ' Wiederherstellen der ursprünglichen Werte, da es sich um eine ' Demonstration handelt.
    rstTitles.MoveFirst
    Do Until rstTitles.EOF
        If Trim(rstTitles!Type) = "self_help" Then
            rstTitles!Type = "psychology"
        End If
        rstTitles.MoveNext
    Loop
    rstTitles.UpdateBatch

    rstTitles.Close

End Sub


ADO-Eigenschaft (Beispiele)

In den folgenden Themen erfahren Sie, wie Sie ADO-Eigenschaften einsetzen können.

Anmerkung Fügen Sie das gesamte Codebeispiel, von Sub bis End Sub, in Ihren Codeeditor ein. Wenn nur Teile der Beispiele verwendet werden oder die Absatzformatierung verloren geht, wird das Beispiel möglicherweise nicht ordnungsgemäß ausgeführt.

  • Beispiel für die Eigenschaften AbsolutePage, PageCount und PageSize

  • Beispiel für die Eigenschaften AbsolutePosition und CursorLocation

  • Beispiel für die Eigenschaften ActiveConnection, CommandText, CommandTimeout, CommandType, Size und Direction

  • Beispiel für die Eigenschaften ActualSize and DefinedSize

  • Beispiel für die Eigenschaften Attributes und Name

  • Beispiel für die Eigenschaften BOF, EOF und Bookmark

  • Beispiel für die CacheSize-Eigenschaft

  • Beispiel für die Connect-Eigenschaft

  • Beispiel für die Eigenschaften ConnectionString, ConnectionTimeout und State

  • Beispiel für die Count-Eigenschaft

  • Beispiel für die Eigenschaften CursorType, LockType und EditMode

  • Beispiel für die Eigenschaften Description, NativeError, Number, Source und SQLState

  • Beispiel für die Eigenschaften ExecuteOptions und FetchOptions

  • Beispiel für die Eigenschaften Filter und RecordCount

  • Beispiel für die Eigenschaften FilterColumn, FilterCriterion, FilterValue, SortColumn, und SortDirection und die Reset-Methode

  • Beispiel für die Eigenschaften IsolationLevel und Mode

  • Beispiel für die MarshalOptions-Eigenschaft

  • Beispiel für die MaxRecords-Eigenschaft

  • Beispiel für die Eigenschaften NumericScale und Precision

  • Beispiel für die Eigenschaften OriginalValue und UnderlyingValue

  • Beispiel für die Prepared-Eigenschaft

  • Beispiel für die Eigenschaften Provider und DefaultDatabase

  • Beispiel für die Eigenschaften Recordset und SourceRecordset

  • Beispiel für die ReadyState-Eigenschaft

  • Beispiel für die Server-Eigenschaft

  • Beispiel für die Source-Eigenschaft

  • Beispiel für die SQL-Eigenschaft

  • Beispiel für die State-Eigenschaft

  • Beispiel für die Status-Eigenschaft

  • Beispiel für die Type-Eigenschaft

  • Beispiel für die Type-Eigenschaft

  • Beispiel für die Version-Eigenschaft


Beispiel für die Eigenschaften AbsolutePage, PageCount und PageSize

In diesem Beispiel werden die Eigenschaften AbsolutePage, PageCount und PageSize verwendet, um fünf Datensätze mit Namen und Angaben zur Einstellung aus der "Employee"-Tabelle gleichzeitig anzuzeigen.

Public Sub AbsolutePageX()

    Dim rstEmployees As ADODB.Recordset
    Dim strCnn As String
    Dim strMessage As String
    Dim intPage As Integer
    Dim intPageCount As Integer
    Dim intRecord As Integer

    ' Öffnen des Recordset mit einem Clientcursor für die
    ' Employee-Tabelle.
    strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"
    Set rstEmployees = New ADODB.Recordset
    ' Aktivieren der AbsolutePosition-Eigenschaft mit Clientcursor.
    rstEmployees.CursorLocation = adUseClient
    rstEmployees.Open "employee", strCnn, , , adCmdTable

    ' Anzeigen der Namen und Einstellungsdaten, fünf Datensätze
    ' gleichzeitig.
    rstEmployees.PageSize = 5
    intPageCount = rstEmployees.PageCount
    For intPage = 1 To intPageCount
        rstEmployees.AbsolutePage = intPage
        strMessage = ""
        For intRecord = 1 To rstEmployees.PageSize
            strMessage = strMessage & _
                rstEmployees!fname & " " & _
                rstEmployees!lname & " " & _
                rstEmployees!hire_date & vbCr
            rstEmployees.MoveNext
            If rstEmployees.EOF Then Exit For
        Next intRecord
        MsgBox strMessage
    Next intPage
    rstEmployees.Close

End Sub


Beispiel für die Eigenschaften AbsolutePosition und CursorLocation

In diesem Beispiel wird gezeigt, wie mit der Eigenschaft AbsolutePosition der Fortschritt einer Schleife überwacht werden kann, die alle Datensätze eines Recordset-Objekts aufzählt. Mit der Eigenschaft CursorLocation wird die Eigenschaft AbsolutePosition ermöglicht, indem der Cursor auf einen Clientcursor gesetzt wird.

Public Sub AbsolutePositionX()

    Dim rstEmployees As ADODB.Recordset
    Dim strCnn As String
    Dim strMessage As String

    ' Öffnen des Recordset mit einem Clientcursor für die
    ' Employee-Tabelle.
    strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"
    Set rstEmployees = New ADODB.Recordset
    ' Aktivieren der AbsolutePosition-Eigenschaft mit Clientcursor.
    rstEmployees.CursorLocation = adUseClient
    rstEmployees.Open "employee", strCnn, , , adCmdTable

    ' Durchgehen des Recordset.
    Do While Not rstEmployees.EOF
        ' Anzeigen der Daten des aktuellen Datensatzes.
        strMessage = "Employee: " & rstEmployees!lName & vbCr & _
            "(record " & rstEmployees.AbsolutePosition & _
            " of " & rstEmployees.RecordCount & ")"
        If MsgBox(strMessage, vbOKCancel) = vbCancel _
            Then Exit Do
        rstEmployees.MoveNext
    Loop

    rstEmployees.Close

End Sub


Beispiel für die Eigenschaften ActiveConnection, CommandText, CommandTimeout, CommandType, Size und Direction

In diesem Beispiel werden die Eigenschaften ActiveConnection, CommandText, CommandTimeout, CommandType, Size und Direction verwendet, um eine gespeicherte Prozedur auszuführen.

Public Sub ActiveConnectionX()

    Dim cnn1 As ADODB.Connection
    Dim cmdByRoyalty As ADODB.Command
    Dim prmByRoyalty As ADODB.Parameter
    Dim rstByRoyalty As ADODB.Recordset
    Dim rstAuthors As ADODB.Recordset
    Dim intRoyalty As Integer
    Dim strAuthorID As String
    Dim strCnn As String

    ' Definieren eines command-Objekts für eine gespeicherte Prozedur.
    Set cnn1 = New ADODB.Connection
    strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"
    cnn1.Open strCnn
    Set cmdByRoyalty = New ADODB.Command
    Set cmdByRoyalty.ActiveConnection = cnn1
    cmdByRoyalty.CommandText = "byroyalty"
    cmdByRoyalty.CommandType = adCmdStoredProc
    cmdByRoyalty.CommandTimeout = 15

    ' Definieren der Eingabeparameter der gespeicherten Prozedur.
    intRoyalty = Trim(InputBox( _
        "Enter royalty:"))
    Set prmByRoyalty = New ADODB.Parameter
    prmByRoyalty.Type = adInteger
    prmByRoyalty.Size = 3
    prmByRoyalty.Direction = adParamInput
    prmByRoyalty.Value = intRoyalty
    cmdByRoyalty.Parameters.Append prmByRoyalty

    ' Erstellen des Recordset durch Ausführen des Befehls.
    Set rstByRoyalty = cmdByRoyalty.Execute()

    ' Öffnen der Authors-Tabelle, um Verfassernamen anzuzeigen.
    Set rstAuthors = New ADODB.Recordset
    rstAuthors.Open "authors", strCnn, , , adCmdTable

    ' Drucken der aktuellen Daten im Recordset, Hinzufügen der
    ' Verfassernamen der Authors-Tabelle.
    Debug.Print "Verfasser mit " & intRoyalty & _
        " Prozent Tantiemen"
    Do While Not rstByRoyalty.EOF
        strAuthorID = rstByRoyalty!au_id
        Debug.Print , rstByRoyalty!au_id & ", ";
        rstAuthors.Filter = "au_id = '" & strAuthorID & "'"
        Debug.Print rstAuthors!au_fname & " " & _
            rstAuthors!au_lname
        rstByRoyalty.MoveNext
    Loop

    rstByRoyalty.Close
    rstAuthors.Close
    cnn1.Close

End Sub


Beispiel für die Eigenschaften ActualSize und DefinedSize

In diesem Beispiel werden die Eigenschaften ActualSize und DefinedSize verwendet, um die definierte Größe und tatsächliche Größe eines Feldes anzuzeigen.

Public Sub ActualSizeX()

    Dim rstStores As ADODB.Recordset
    Dim strCnn As String

    ' Öffnen des Recordset für die Stores-Tabelle.
    strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"
    Set rstStores = New ADODB.Recordset
    rstStores.Open "stores", strCnn, , , adCmdTable

    ' Durchsuchen des Recordset, um den Inhalt
    ' des stor_name-Feldes, die definierte Größe des Feldes
    ' und seine tatsächliche Größe anzuzeigen.
    rstStores.MoveFirst

    Do Until rstStores.EOF
        MsgBox "Speichern des Namens: " & rstStores!stor_name & _
        vbCr & "Defined size: " & _
        rstStores!stor_name.DefinedSize & _
        vbCr & "Actual size: " & _
        rstStores!stor_name.ActualSize & vbCr
        rstStores.MoveNext
    Loop

    rstStores.Close

End Sub


Beispiel für die Eigenschaften Attributes und Name

In diesem Beispiel wird der Wert der Attributes-Eigenschaft für die Objekte Connection, Field und Property angezeigt. Mit der Name-Eigenschaft wird der Name jedes Field- und Property-Objekts angezeigt.

Public Sub AttributesX

    Dim cnn1 As ADODB.Connection
    Dim rstEmployees As ADODB.Recordset
    Dim fldLoop As ADODB.Field
    Dim proLoop As ADODB.Property
    Dim strCnn As String

    ' Öffnen von Verbindung und Recordset.
    strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"
    Set cnn1 = New ADODB.Connection
    cnn1.Open strCnn
    Set rstEmployees = New ADODB.Recordset
    rstEmployees.Open "employee", cnn1, , , adCmdTable

    ' Anzeigen der Attribute der Verbindung.
    Debug.Print "Attribute der Verbindung = " & _
        cnn1.Attributes

    ' Anzeigen der Attribute der
    ' Felder der Employee-Tabelle.
    Debug.Print "Attribute des Feldes:"
    For Each fldLoop In rstEmployees.Fields
        Debug.Print "    " & fldLoop.Name & " = " & _
            fldLoop.Attributes
    Next fldLoop

    ' Anzeigen aller Felder der Employee-Tabelle, die den Wert NULL  ' annehmen können.
    Debug.Print "Felder, die den Wert NULL annehmen können:"
    For Each fldLoop In rstEmployees.Fields
        If CBool(fldLoop.Attributes And adFldIsNullable) Then
            Debug.Print "   " & fldLoop.Name
        End If
    Next fldLoop

    ' Anzeigen der Attribute der
    ' Eigenschaften der Employee-Tabelle.
    Debug.Print "Attribute der Eigenschaft:"
    For Each proLoop In rstEmployees.Properties
        Debug.Print "    " & proLoop.Name & " = " & _
            proLoop.Attributes
    Next proLoop

    rstEmployees.Close
    cnn1.Close

End Sub


Beispiel für die Eigenschaften BOF, EOF und Bookmark

In diesem Beispiel werden die Eigenschaften BOF und EOF verwendet, um eine Nachricht anzuzeigen, wenn der Benutzer über den ersten oder letzten Datensatz eines Recordset-Objekts hinausgehen möchte. Mit der Bookmark-Eigenschaft kann der Benutzer einen Datensatz in einem Recordset-Objekt markieren und später dorthin zurückkehren.

Public Sub BOFX()

    Dim rstPublishers As ADODB.Recordset
    Dim strCnn As String
    Dim strMessage As String
    Dim intCommand As Integer
    Dim varBookmark As Variant

    ' Öffnen des Recordset mit den Daten der Publishers-Tabelle.
    strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"
    Set rstPublishers = New ADODB.Recordset
    rstPublishers.CursorType = adOpenStatic
    ' Aktivieren der AbsolutePosition-Eigenschaft mit Clientcursor.
    rstPublishers.CursorLocation = adUseClient
    rstPublishers.Open "SELECT pub_id, pub_name FROM publishers " & _
        "ORDER BY pub_name", strCnn, , , adCmdText

    rstPublishers.MoveFirst

    Do While True
        ' Anzeigen der Informationen über den aktuellen Datensatz
        ' und Abwarten einer Benutzereingabe.
        strMessage = "Publisher: " & rstPublishers!pub_name & _
            vbCr & "(record " & rstPublishers.AbsolutePosition & _
            " of " & rstPublishers.RecordCount & ")" & vbCr & vbCr & _
            "Enter command:" & vbCr & _
            "[1 - next / 2 - previous /" & vbCr & _
            "3 - set bookmark / 4 - go to bookmark]"
        intCommand = Val(InputBox(strMessage))

        Select Case intCommand
            ' Bewegen nach vorne oder hinten, Suchen nach BOF
            ' oder EOF.
            Case 1
                rstPublishers.MoveNext
                If rstPublishers.EOF Then
                    MsgBox "Sie bewegen sich über den letzten Datensatz hinaus." & _
                        vbCr & "Try again."
                    rstPublishers.MoveLast
                End If
            Case 2
                rstPublishers.MovePrevious
                If rstPublishers.BOF Then
                    MsgBox "Sie bewegen sich über den ersten Datensatz hinaus." & _
                        vbCr & "Wiederholen Sie den Vorgang."
                    rstPublishers.MoveFirst
                End If

            ' Speichern des Lesezeichens des aktuellen Datensatzes.
            Case 3
                varBookmark = rstPublishers.Bookmark

            ' Bewegen zum Datensatz, der durch das gespeicherte Lesezeichen
            ' angegeben ist.
            Case 4
                If IsEmpty(varBookmark) Then
                    MsgBox "Es wurde kein Lesezeichen gesetzt."
                Else
                    rstPublishers.Bookmark = varBookmark
                End If

            Case Else
                Exit Do
        End Select

    Loop

    rstPublishers.Close

End Sub

In diesem Beispiel wird mit den Eigenschaften Bookmark und Filter eine eingeschränkte Ansicht des Recordset-Objekts erstellt. Es kann nur auf die Datensätze zugegriffen werden, auf die durch ein Array mit Lesezeichen verwiesen wird.

Public Sub BOFX2()

Dim rs As New ADODB.Recordset
Dim bmk(10)

rs.CursorLocation = adUseClient
rs.ActiveConnection = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"

rs.Open "select * from authors", , adOpenStatic, adLockBatchOptimistic
Debug.Print "Anzahl der Datensätze vor dem Filtern: ", rs.RecordCount

ii = 0
While rs.EOF <> True And ii < 11
    bmk(ii) = rs.Bookmark
    ii = ii + 1
    rs.Move 2
Wend
rs.Filter = bmk
Debug.Print "Anzahl der Datensätze nach dem Filtern: ", rs.RecordCount

rs.MoveFirst
While rs.EOF <> True
    Debug.Print rs.AbsolutePosition, rs("au_lname")
    rs.MoveNext
Wend

End Sub


Beispiel für die CacheSize-Eigenschaft

In diesem Beispiel wird die Eigenschaft CacheSize verwendet, um die unterschiedliche Leistung bei einer Operation mit und ohne Zwischenspeicher mit 30 Datensätzen zu verdeutlichen.

Public Sub CacheSizeX()

    Dim rstRoySched As ADODB.Recordset
    Dim strCnn As String
    Dim sngStart As Single
    Dim sngEnd As Single
    Dim sngNoCache As Single
    Dim sngCache As Single
    Dim intLoop As Integer
    Dim strTemp As String

    ' Öffnen der RoySched-Tabelle.
    strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"
    Set rstRoySched = New ADODB.Recordset
    rstRoySched.Open "roysched", strCnn, , , adCmdTable

    ' Zweimaliges Aufzählen des Recordset-Objekts und Aufzeichnen
    ' der verstrichenen Zeit.
    sngStart = Timer

    For intLoop = 1 To 2
        rstRoySched.MoveFirst

        Do While Not rstRoySched.EOF
            ' Ausführen einer einfachen Operation für den
            ' Leistungstest.
            strTemp = rstRoySched!title_id
            rstRoySched.MoveNext
        Loop
    Next intLoop

    sngEnd = Timer
    sngNoCache = sngEnd - sngStart

    ' Zwischenspeichern der Datensätze in Gruppen von 30 Datensätzen.
    rstRoySched.MoveFirst
    rstRoySched.CacheSize = 30
    sngStart = Timer

    ' Zweimaliges Aufzählen des Recordset-Objekts und Aufzeichnen
    ' der verstrichenen Zeit.
    For intLoop = 1 To 2

        rstRoySched.MoveFirst
        Do While Not rstRoySched.EOF
            ' Ausführen einer einfachen Operation für den
            ' Leistungstest.
            strTemp = rstRoySched!title_id
            rstRoySched.MoveNext
        Loop
    Next intLoop

    sngEnd = Timer
    sngCache = sngEnd - sngStart

    ' Anzeigen der Testergebnisse.
    MsgBox "Testergebnisse werden zwischengespeichert:" & vbCr & _
        "    No cache: " & Format(sngNoCache, _
        "##0.000") & " Sekunden" & vbCr & _
        "    30-record cache: " & Format(sngCache, _
        "##0.000") & " Sekunden"
    rstRoySched.Close

End Sub


Beispiel für die Connect-Eigenschaft

Dieser Code zeigt, wie die Connect-Eigenschaft während der Entwurfszeit gesetzt wird:

<OBJECT CLASSID="clsid:BD96C556-65A3-11D0-983A-00C04FC29E33" ID="ADC1">
.
.
.
    <PARAM NAME="SQL" VALUE="Select * from Sales">
    <PARAM NAME="Connect" VALUE="DSN=pubs;UID=sa;PWD=;">
    <PARAM NAME="Server" VALUE="http://MyWebServer">
.
.
.
</OBJECT>

Im folgenden Beispiel wird gezeigt, wie die Connect-Eigenschaft während der Laufzeit in VBScript-Code gesetzt wird.

Um dieses Beispiel zu testen, schneiden Sie den Code aus und fügen ihn zwischen den Tags <BODY> und </BODY> in einem einfachen HTML-Dokument wieder ein, dem Sie die Bezeichnung adcapi6.asp geben. ASP-Skript erkennt Ihren Server.

<Center><H2>RDS API-Codebeispiele </H2>
<HR>
<H3>Setzen der Connect-Eigenschaft zur Laufzeit</H3>
<!-- RDS.DataControl ohne Parameter, die während der Entwurfszeit gesetzt wurden -->
<OBJECT classid="clsid:BD96C556-65A3-11D0-983A-00C04FC29E33"
    ID=ADC>
    </OBJECT>
<Object classid="clsid:AC05DC80-7DF1-11d0-839E-00A024A94B3A"
    CODEBASE="http://<%=Request.ServerVariables("SERVER_NAME")%>/MSADC/Samples/Sheridan.cab"
    ID=GRID1
        datasrc=#ADC
        HEIGHT=125
        WIDTH=495>
    <PARAM NAME="AllowAddNew" VALUE="TRUE">
    <PARAM NAME="AllowDelete" VALUE="TRUE">
    <PARAM NAME="AllowUpdate" VALUE="TRUE">
    <PARAM NAME="Caption" VALUE="Remote Data Service Connect Property at Run Time">
</OBJECT>
<HR>
<Input Size=70 Name="txtServer" Value="http://<%=Request.ServerVariables("SERVER_NAME")%>"><BR>
<Input Size=70 Name="txtConnect"><BR>
<Input Size=70 Name="txtSQL" Value="Select * from Employee">
<HR>
<INPUT TYPE=BUTTON NAME="Run" VALUE="Run"><BR>
<H4>Zum Ausfüllen des Tabellen-Steuerelements Verbindungszeichenfolge in mittleres Textfeld eingeben<BR>
Try dsn=ADCDemo;UID=ADCDemo;PWD=ADCDemo;</H4>
</Center>
<Script Language="VBScript">
<!--
' Setzen der Parameter von RDS.DataControl während der Laufzeit
Sub Run_OnClick
    ADC.Server = txtServer.Value
    ADC.SQL = txtSQL.Value
    ADC.Connect = txtConnect.Value
    ADC.Refresh
End Sub
-->
</Script>


Beispiel für die Eigenschaften ConnectionString, ConnectionTimeout und State

Dieses Beispiel zeigt, wie Sie ein Connection-Objekt mit der ConnectionString-Eigenschaft auf unterschiedliche Art öffnen können. Es wird auch die ConnectionTimeout-Eigenschaft verwendet, um ein Zeitlimit für eine Verbindung anzugeben, und die State-Eigenschaft, um den Status der Verbindungen zu überprüfen. Zum Ausführen dieser Prozedur ist die GetState-Funktion erforderlich.

Public Sub ConnectionStringX()

    Dim cnn1 As ADODB.Connection
    Dim cnn2 As ADODB.Connection
    Dim cnn3 As ADODB.Connection
    Dim cnn4 As ADODB.Connection

    ' Öffnen der Verbindung ohne Data Source Name (DSN).
    Set cnn1 = New ADODB.Connection
    cnn1.ConnectionString = "driver={SQL Server};" & _
        "server=bigsmile;uid=sa;pwd=pwd;database=pubs"
    cnn1.ConnectionTimeout = 30
    cnn1.Open

    ' Öffnen der Verbindung mit DSN und ODBC-Tags.
    Set cnn2 = New ADODB.Connection
    cnn2.ConnectionString = "DSN=Pubs;UID=sa;PWD=pwd;"
    cnn2.Open

    ' Öffnen der Verbindung mit DSN und OLE DB-Tags.
    Set cnn3 = New ADODB.Connection
    cnn3.ConnectionString = "Data Source=Pubs;User ID=sa;Password=pwd;"
    cnn3.Open

    ' Öffnen der Verbindung mit DSN und einzelnen
    ' Argumenten statt mit einer Verbindungszeichenfolge.
    Set cnn4 = New ADODB.Connection
    cnn4.Open "Pubs", "sa", "pwd"

    ' Anzeigen des Status der Verbindungen.
    MsgBox "cnn1 State: " & GetState(cnn1.State) & vbCr & _
        "cnn2 state: " & GetState(cnn2.State) & vbCr & _
        "cnn3 state: " & GetState(cnn3.State) & vbCr & _
        "cnn4 state: " & GetState(cnn4.State)

    cnn4.Close
    cnn3.Close
    cnn2.Close
    cnn1.Close

End Sub

Public Function GetState(intState As Integer) As String

    Select Case intState
        Case adStateClosed
            GetState = "adStateClosed"
        Case adStateOpen
            GetState = "adStateOpen"
    End Select

End Function


Beispiel für die Count-Eigenschaft

Dieses Beispiel zeigt die Count-Eigenschaft mit zwei Auflistungen in der "Employee"-Datenbank. Die Eigenschaft erhält die Anzahl der Objekte in jeder Auflistung und gibt die obere Grenze für Schleifen an, die diese Auflistungen aufzählen. Diese Auflistungen können auch ohne die Count-Eigenschaft aufgezählt werden, indem For Each...Next-Anweisungen verwendet werden.

Public Sub CountX()

    Dim rstEmployees As ADODB.Recordset
    Dim strCnn As String
    Dim intloop As Integer

    ' Öffnen eines Recordset mit Daten der Employees-Tabelle.
    strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"
    Set rstEmployees = New ADODB.Recordset
    rstEmployees.Open "employee", strCnn, , , adCmdTable

    ' Drucken der Informationen über die Fields-Auflistung.
    Debug.Print rstEmployees.Fields.Count & _
        " Fields in Employee"
    For intloop = 0 To rstEmployees.Fields.Count - 1
        Debug.Print "    " & rstEmployees.Fields(intloop).Name
    Next intloop

    ' Drucken der Informationen über die Properties-Auflistung.
    Debug.Print rstEmployees.Properties.Count & _
        " Properties in Employee"
    For intloop = 0 To rstEmployees.Properties.Count - 1
        Debug.Print "    " & rstEmployees.Properties(intloop).Name
    Next intloop

    rstEmployees.Close

End Sub


Beispiel für die Eigenschaften CursorType, LockType und EditMode

In diesem Beispiel wird gezeigt, wie die Eigenschaften CursorType und LockType vor dem Öffnen eines Recordset-Objekts gesetzt werden. Das Beispiel zeigt auch den Wert der EditMode-Eigenschaft unter verschiedenen Bedingungen. Zum Ausführen dieser Prozedur ist die EditModeOutput-Funktion erforderlich.

Public Sub EditModeX()

    Dim cnn1 As ADODB.Connection
    Dim rstEmployees As ADODB.Recordset
    Dim strCnn As String

    ' Öffnen eines Recordset mit Daten der Employees-Tabelle.
    Set cnn1 = New ADODB.Connection
    strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"
    cnn1.Open strCnn

    Set rstEmployees = New ADODB.Recordset
    Set rstEmployees.ActiveConnection = cnn1
    rstEmployees.CursorType = adOpenKeyset
    rstEmployees.LockType = adLockBatchOptimistic
    rstEmployees.Open "employee", , , , adCmdTable

    ' Anzeigen der EditMode-Eigenschaft in verschiedenen
    ' Bearbeitungszuständen.
    rstEmployees.AddNew
    rstEmployees!emp_id = "T-T55555M"
    rstEmployees!fname = "temp_fname"
    rstEmployees!lname = "temp_lname"
    EditModeOutput "After AddNew:", rstEmployees.EditMode
    rstEmployees.UpdateBatch
    EditModeOutput "After UpdateBatch:", rstEmployees.EditMode
    rstEmployees!fname = "test"
    EditModeOutput "After Edit:", rstEmployees.EditMode
    rstEmployees.Close

    ' Löschen des neuen Datensatzes, da dies ein Beispiel ist.
    cnn1.Execute "DELETE FROM employee WHERE emp_id = 'T-T55555M'"

End Sub

Public Function EditModeOutput(strTemp As String, _
    intEditMode As Integer)

    ' Drucken eines Berichts basierend auf dem Wert der EditMode-
    ' Eigenschaft.
    Debug.Print strTemp
    Debug.Print "  EditMode = ";

    Select Case intEditMode
        Case adEditNone
            Debug.Print "adEditNone"
        Case adEditInProgress
            Debug.Print "adEditInProgress"
        Case adEditAdd
            Debug.Print "adEditAdd"
    End Select

End Function


Beispiel für die Eigenschaften Description, NativeError, Number, Source und SQLState

In diesem Beispiel wird ein Fehler ausgelöst und aufgefangen und die Eigenschaften Description, HelpContext, HelpFile, NativeError, Number, Source und SQLState des entstehenden Error-Objekts werden angezeigt.

Public Sub DescriptionX()

    Dim cnn1 As ADODB.Connection
    Dim errLoop As ADODB.Error
    Dim strError As String

    +On Error GoTo ErrorHandler

    ' Absichtliches Auslösen eines Fehlers.
    Set cnn1 = New ADODB.Connection
    cnn1.Open "nothing"

    Exit Sub

ErrorHandler:

    ' Aufzählen der Errors-Auflistung und Anzeigen der Eigenschaften
    ' jedes Error-Objekts.
    For Each errLoop In cnn1.Errors
        strError = "Error #" & errLoop.Number & vbCr & _
            "    " & errLoop.Description & vbCr & _
            "    (Source: " & errLoop.Source & ")" & vbCr & _
            "    (SQL State: " & errLoop.SQLState & ")" & vbCr & _
            "    (NativeError: " & errLoop.NativeError & ")" & vbCr
        If errLoop.HelpFile = "" Then
            strError = strError & _
                "    No Help file available" & _
                vbCr & vbCr
        Else
            strError = strError & _
                "    (HelpFile: " & errLoop.HelpFile & ")" & vbCr & _
                "    (HelpContext: " & errLoop.HelpContext & ")" & _
                vbCr & vbCr
        End If

    Debug.Print strError
    Next

    Resume Next

End Sub


Beispiel für die Eigenschaften ExecuteOptions und FetchOptions

Im folgenden Code wird gezeigt, wie die Eigenschaften ExecuteOptions und FetchOptions während der Entwurfszeit gesetzt werden. Werden sie nicht gesetzt, ist ExecuteOptions standardmäßig auf adcExecSync gesetzt. Dies bedeutet, dass die ADC.Refresh-Methode nach dem Aufruf auf dem aktuellen, aufrufenden Thread, d. h. synchron, ausgeführt wird.

<OBJECT CLASSID="clsid:BD96C556-65A3-11D0-983A-00C04FC29E33" ID="ADC1">
.
.
.
<PARAM NAME="SQL" VALUE="Select * from Sales">
<PARAM NAME="Connect" VALUE="DSN=pubs;UID=sa;PWD=;">
<PARAM NAME="Server" VALUE="http://MyWebServer">
<PARAM NAME="ExecuteOptions" VALUE="1">
<PARAM NAME="FetchOptions" VALUE="3">

.
.
</OBJECT>

Im folgenden Beispiel wird gezeigt, wie die Eigenschaften ExecuteOptions und FetchOptions während der Laufzeit in VBScript-Code gesetzt werden. Ein ausführbares Beispiel für diese Eigenschaften finden Sie unter Refresh-Methode.

<Script Language="VBScript">
<!--
Sub ExecuteHow
' Asynchrones Ausführen der nächsten Aktualisierung des Recordset zum ' aufrufenden Thread.
ADC1.ExecuteOptions = 1
ADC1.FetchOptions = 3
ADC.Refresh
End Sub
-->
</Script>


Beispiel für die Eigenschaften Filter und RecordCount

In diesem Beispiel wird die Filter-Eigenschaft zum Öffnen eines neuen Recordset-Objekts auf der Grundlage einer angegebenen Bedingung verwendet, die auf ein vorhandenes Recordset-Objekt angewendet wird. Mit der RecordCount-Eigenschaft wird die Anzahl der Datensätze in den beiden Recordset-Objekten angezeigt. Zum Ausführen dieser Prozedur ist die FilterField-Funktion erforderlich.

Public Sub FilterX()

    Dim rstPublishers As ADODB.Recordset
    Dim rstPublishersCountry As ADODB.Recordset
    Dim strCnn As String
    Dim intPublisherCount As Integer
    Dim strCountry As String
    Dim strMessage As String

    ' Öffnen des Recordset mit den Daten der Publishers-Tabelle.
    strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"
    Set rstPublishers = New ADODB.Recordset
    rstPublishers.CursorType = adOpenStatic
    rstPublishers.Open "publishers", strCnn, , , adCmdTable

    ' Füllen des Recordset.
    intPublisherCount = rstPublishers.RecordCount

    ' Abwarten einer Benutzereingabe.
    strCountry = Trim(InputBox( _
        "Enter a country to filter on:"))

    If strCountry <> "" Then
        ' Öffnen eines gefilterten Recordset-Objekts.
        Set rstPublishersCountry = _
            FilterField(rstPublishers, "Country", strCountry)

        If rstPublishersCountry.RecordCount = 0 Then
            MsgBox "Keine Verlage aus diesem Land."
        Else
            ' Drucken der Anzahl der Datensätze für das ursprüngliche
            ' Recordset-Objekt und das gefilterte Recordset-
            'Objekt.
            strMessage = "Orders in original recordset: " & _
                vbCr & intPublisherCount & vbCr & _
                "Orders in filtered recordset (Country = '" & _
                strCountry & "'): " & vbCr & _
                rstPublishersCountry.RecordCount
            MsgBox strMessage
        End If
        rstPublishersCountry.Close

    End If

End Sub

Public Function FilterField(rstTemp As ADODB.Recordset, _
    strField As String, strFilter As String) As ADODB.Recordset

    ' Setzen eines Filters für das angegebene Recordset-Objekt und
    ' Öffnen eines neuen Recordset-Objekts.
    rstTemp.Filter = strField & " = '" & strFilter & "'"
    Set FilterField = rstTemp

End Function

Anmerkung Wenn Sie sich bereits entschieden haben, welche Daten Sie auswählen möchten, ist es in der Regel effizienter, das Recordset-Objekt mit einer SQL-Anweisung zu öffnen. In diesem Beispiel wird gezeigt, wie Sie nur ein Recordset-Objekt erstellen und Datensätze von einem bestimmten Land erhalten können.

Public Sub FilterX2()

    Dim rstPublishers As ADODB.Recordset
    Dim strCnn As String

    ' Öffnen des Recordset mit den Daten der Publishers-Tabelle.
    strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"
    Set rstPublishers = New ADODB.Recordset
    rstPublishers.CursorType = adOpenStatic
    rstPublishers.Open "SELECT * FROM publishers " & _
        "WHERE Country = 'USA'", strCnn, , , adCmdText

    ' Drucken der aktuellen Daten des Recordset.
    rstPublishers.MoveFirst
    Do While Not rstPublishers.EOF
        Debug.Print rstPublishers!pub_name & ", " & _
            rstPublishers!country
        rstPublishers.MoveNext
    Loop

    rstPublishers.Close

End Sub


Beispiel für die Eigenschaften FilterColumn, FilterCriterion, FilterValue, SortColumn und SortDirection und die Reset-Methode

Der folgende Code zeigt, wie der Server-Parameter von RDS.DataControl während der Entwurfszeit gesetzt wird und mit der ODBC-Datenquelle Pubs an ein datenbezogenes Steuerelement gebunden werden kann. Pubs wird mit SQL Server 6.5 geliefert. Zum Ausführen dieses Beispiels benötigen Sie die RichText-Steuerelemente txtSortcolumn, txtSortdirection, txtFiltercolumn, txtCriterion und txtFilterValue sowie die Eingabeschaltfläche mit dem Namen SortFilter im HTML-Formular.

<OBJECT CLASSID="clsid:BD96C556-65A3-11D0-983A-00C04FC29E33"
ID=ADC HEIGHT=10 WIDTH=10>
<PARAM NAME="SQL" VALUE="Select * from Sales ">
<PARAM NAME="SERVER" VALUE="http://MyWebServer">
<PARAM NAME="CONNECT" VALUE="dsn=pubs;UID=sa;PWD=;">
</OBJECT>

<!-- Sheridan Grid -->
<Object CLASSID="clsid:AC05DC80-7DF1-11d0-839E-00A024A94B3A"
    CODEBASE="http://MyWebServer
/MSADC/Samples/Sheridan.cab"
    ID=GRID1
        datasrc=#ADC
        HEIGHT=125
        WIDTH=495>
    <PARAM NAME="AllowAddNew" VALUE="TRUE">
    <PARAM NAME="AllowDelete" VALUE="TRUE">
    <PARAM NAME="AllowUpdate" VALUE="TRUE">
    <PARAM NAME="BackColor"   VALUE="-2147483643">
    <PARAM NAME="BackColorOdd"  VALUE="-2147483643">
    <PARAM NAME="ForeColorEven" VALUE="0">
</OBJECT>

<Script Language="VBScript">
<!--
Sub SortFilter_OnClick

    ' Setzen der Werte. txtSortcolumn ist ein RTF-Steuerelement.
    ' Der Wert von SortColumn entspricht dem Textwert
    ' der Benutzereingabe im Feld
    ' txtSortcolumn.
    If(txtSortcolumn.text <> "") then
        ADC.SortColumn = txtSortcolumn.text
    End If

    ' txtSortdirection ist ein RTF-Steuerelement.
    ' Der Wert von SortDirection entspricht dem Textwert
    ' der Benutzereingabe im Feld
    ' txtSortdirection.
    Select Case UCASE(txtSortDirection.text)
    Case "TRUE"
        ADC.SortDirection = TRUE
    Case "FALSE"
        ADC.SortDirection = FALSE
    Case Else
        MsgBox "Bei Sortierreihenfolge sind nur True und False gültig"
    End Select

    ' txtFiltercolumn ist ein RTF-Steuerelement.
    ' Der Wert von FilterColumn entspricht
    ' dem Textwert der Benutzereingabe im Feld
    ' txtFiltercolumn.
    If (txtFiltercolumn.text <> "") Then
        ADC.FilterColumn = txtFiltercolumn.text
    End If

    ' txtCriterion ist ein RTF-Steuerelement.
    ' Der Wert von FilterCriterion entspricht
    ' dem Textwert der Benutzereingabe im Feld
    ' txtCriterion.
    If (txtCriterion.text <> "") Then
        ADC.FilterCriterion = txtCriterion.text
    End If

    ' txtFilterValue ist ein RTF-Steuerelement.
    ' Der Wert von FilterValue entspricht
    ' dem Textwert der Benutzereingabe im Feld
    ' txtFilterValue.
    If (txtFilterValue.text <> "") Then
        ADC.FilterValue = txtFilterValue.text
    End If

    ' Sortieren und Filtern eines Recordset auf der
    ' Client-Seite basierend auf den angegebenen Sort- und Filter-
    'Eigenschaften der Employee-Tabelle. Durch Aufrufen von Reset wird der
    ' Ergebnissatz aktualisiert, der in den datengebundenen
    ' Steuerelementen angezeigt ist, so dass das gefilterte, sortierte
    ' Recordset angezeigt wird.
    ADC.Reset

End Sub
-->
</Script>


Beispiel für die Eigenschaften IsolationLevel und Mode

In diesem Beispiel wird die Mode-Eigenschaft zum Öffnen einer exklusiven Verbindung verwendet. Die IsolationLevel-Eigenschaft wird zum Öffnen einer Transaktion verwendet, die getrennt von anderen Transaktionen ausgeführt wird.

Public Sub IsolationLevelX()

    Dim cnn1 As ADODB.Connection
    Dim rstTitles As ADODB.Recordset
    Dim strCnn As String

    ' Zuweisen einer Verbindungszeichenfolge zu einer Variablen.
    strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"

    ' Öffnen der Verbindung und der Titles-Tabelle.
    Set cnn1 = New ADODB.Connection
    cnn1.Mode = adModeShareExclusive
    cnn1.IsolationLevel = adXactIsolated
    cnn1.Open strCnn

    Set rstTitles = New ADODB.Recordset
    rstTitles.CursorType = adOpenDynamic
    rstTitles.LockType = adLockPessimistic
    rstTitles.Open "titles", cnn1, , , adCmdTable

    cnn1.BeginTrans

    ' Anzeigen des Verbindungsmodus.
    If cnn1.Mode = adModeShareExclusive Then
        MsgBox "Verbindungsmodus ist exklusiv."
    Else
        MsgBox "Verbindungsmodus ist nicht exklusiv."
    End If

    ' Anzeigen der Isolierungsebene.
    If cnn1.IsolationLevel = adXactIsolated Then
        MsgBox "Transaktion ist isoliert."
    Else
        MsgBox "Transaktion ist nicht isoliert."
    End If

    ' Ändern des Typs der psychology-Titel.
    Do Until rstTitles.EOF
        If Trim(rstTitles!Type) = "psychology" Then
            rstTitles!Type = "self_help"
            rstTitles.Update
        End If
        rstTitles.MoveNext
    Loop

    ' Drucken der aktuellen Daten des Recordset.
    rstTitles.Requery
    Do While Not rstTitles.EOF
        Debug.Print rstTitles!Title & " - " & rstTitles!Type
        rstTitles.MoveNext
    Loop

    ' Wiederherstellen der ursprünglichen Daten.
    cnn1.RollbackTrans
    rstTitles.Close

    cnn1.Close

End Sub


Beispiel für die MarshalOptions-Eigenschaft

In diesem Beispiel wird die MarshalOptions-Eigenschaft verwendet, um die Zeilen anzugeben, die zurück an den Server geschickt werden - alle Zeilen oder nur veränderte Zeilen.

Public Sub MarshalOptionsX()

    Dim rstEmployees As ADODB.Recordset
    Dim strCnn As String
    Dim strOldFirst As String
    Dim strOldLast As String
    Dim strMessage As String
    Dim strMarshalAll As String
    Dim strMarshalModified As String

    ' Öffnen des Recordset mit Namen der Employee-Tabelle.
    strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"
    Set rstEmployees = New ADODB.Recordset
    rstEmployees.CursorType = adOpenKeyset
    rstEmployees.LockType = adLockOptimistic
    rstEmployees.CursorLocation = adUseClient
    rstEmployees.Open "SELECT fname, lname " & _
        "FROM Employee ORDER BY lname", strCnn, , , adCmdText

    ' Speichern der ursprünglichen Daten.
    strOldFirst = rstEmployees!fname
    strOldLast = rstEmployees!lname

    ' Verändern der Daten im Bearbeitungspuffer.
    rstEmployees!fname = "Linda"
    rstEmployees!lname = "Kobara"

    ' Anzeigen des Inhalts des Puffers und Warten auf Benutzereingabe.
    strMessage = "Bearbeitung läuft:" & vbCr & _
        " Original data = " & strOldFirst & " " & _
        strOldLast & vbCr & " Data in buffer = " & _
        rstEmployees!fname & " " & rstEmployees!lname & vbCr & vbCr & _
        "Verwenden der Aktualisierung zum Ersetzen der ursprünglichen Daten " & _
        "durch die im Puffer vorhandenen Daten im Recordset?"
    strMarshalAll = "Möchten Sie alle Zeilen im " & _
                    "Recordset zurück zum Server schicken?"
    strMarshalModified = "Möchten Sie nur geänderte Zeilen " & _
                    "zurück zum Server schicken?"

    If MsgBox(strMessage, vbYesNo) = vbYes Then
        If MsgBox(strMarshalAll, vbYesNo) = vbYes Then
            rstEmployees.MarshalOptions = adMarshalAll
            rstEmployees.Update
        ElseIf MsgBox(strMarshalModified, vbYesNo) = vbYes Then
            rstEmployees.MarshalOptions = adMarshalModifiedOnly
            rstEmployees.Update
        End If
    End If

    ' Anzeigen der resultierenden Daten.
    MsgBox "Daten im Recordset = " & rstEmployees!fname & " " & _
        rstEmployees!lname

    ' Wiederherstellen der ursprünglichen Daten, da dies ein Beispiel ist.
    If Not (strOldFirst = rstEmployees!fname And _
            strOldLast = rstEmployees!lname) Then
        rstEmployees!fname = strOldFirst
        rstEmployees!lname = strOldLast
        rstEmployees.Update
    End If

    rstEmployees.Close

End Sub


Beispiel für die MaxRecords-Eigenschaft

In diesem Beispiel wird die MaxRecords-Eigenschaft zum Öffnen eines Recordset-Objekts verwendet, das die 10 Titel mit den höchsten Kosten in der Titles-Tabelle enthält.

Public Sub MaxRecordsX()

    Dim rstTemp As ADODB.Recordset
    Dim strCnn As String

    ' Öffnen des Recordset mit den 10 Titeln mit den höchsten
    ' Kosten in der Titles-Tabelle.
    strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"
    Set rstTemp = New ADODB.Recordset
    rstTemp.MaxRecords = 10
    rstTemp.Open "SELECT Title, Price FROM Titles " & _
        "ORDER BY Price DESC", strCnn, , , adCmdText

    ' Anzeigen des Inhalts des Recordset.
    Debug.Print "Die zehn Titel mit den höchsten Kosten:"

    Do While Not rstTemp.EOF
        Debug.Print "  " & rstTemp!Title & " - " & rstTemp!Price
        rstTemp.MoveNext
    Loop
    rstTemp.Close

End Sub


Beispiel für die Eigenschaften NumericScale und Precision

In diesem Beispiel werden die Eigenschaften NumericScale und Precision zum Anzeigen der numerischen Skalierung und Genauigkeit der Felder in der "Discounts"-Tabelle der "Pubs"-Datenbank verwendet.

Public Sub NumericScaleX()

    Dim rstDiscounts As ADODB.Recordset
    Dim fldTemp As ADODB.Field
    Dim strCnn As String

    ' Öffnen des Recordset.
    strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"
    Set rstDiscounts = New ADODB.Recordset
    rstDiscounts.Open "discounts", strCnn, , , adCmdTable

    ' Anzeigen der numerischen Skalierung und Genauigkeit der Felder
    ' numerische und kleine ganzzahlige Felder.
    For Each fldTemp In rstDiscounts.Fields
        If fldTemp.Type = adNumeric _
            Or fldTemp.Type = adSmallInt Then
            MsgBox "Feld: " & fldTemp.Name & vbCr & _
                "Numerische Skalierung: " & _
                    fldTemp.NumericScale & vbCr & _
                "Precision: " & fldTemp.Precision
        End If
    Next fldTemp

    rstDiscounts.Close

End Sub


Beispiel für die Eigenschaften OriginalValue und UnderlyingValue

In diesem Beispiel werden die Eigenschaften OriginalValue und UnderlyingValue erläutert, indem eine Nachricht angezeigt wird, wenn sich die einem Datensatz zugrunde liegenden Daten während der Stapelaktualisierung eines Recordset-Objekts verändert haben.

Public Sub OriginalValueX()

    Dim cnn1 As ADODB.Connection
    Dim rstTitles As ADODB.Recordset
    Dim fldType As ADODB.Field
    Dim strCnn As String

    ' Öffnen der Verbindung.
    Set cnn1 = New ADODB.Connection
    strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"
    cnn1.Open strCnn

    ' Öffnen eines Recordset für Stapelaktualisierung.
    Set rstTitles = New ADODB.Recordset
    Set rstTitles.ActiveConnection = cnn1
    rstTitles.CursorType = adOpenKeyset
    rstTitles.LockType = adLockBatchOptimistic
    rstTitles.Open "titles"

    ' Setzen der Variable des Field-Objekts für das Type-Feld.
    Set fldType = rstTitles!Type

    ' Ändern des Typs der psychology-Titel.
    Do Until rstTitles.EOF
        If Trim(fldType) = "psychology" Then
            fldType = "self_help"
        End If
        rstTitles.MoveNext
    Loop

    ' Simulieren einer Änderung durch einen anderen Benutzer, indem Daten
    ' mit einer Befehlszeichenfolge aktualisiert werden.
    cnn1.Execute "UPDATE titles SET type = 'sociology' " & _
        "WHERE type = 'psychology'"

    ' Überprüfen der Änderungen.
    rstTitles.MoveFirst
    Do Until rstTitles.EOF
        If fldType.OriginalValue <> _
            fldType.UnderlyingValue Then

            MsgBox "Daten haben sich geändert." & vbCr & vbCr & _
                "  Title ID: " & rstTitles!title_id & vbCr & _
                "  Current value: " & fldType & vbCr & _
                "  Original value: " & _
                fldType.OriginalValue & vbCr & _
                "  Underlying value: " & _
                fldType.UnderlyingValue & vbCr
        End If
        rstTitles.MoveNext
    Loop

    ' Abbrechen der Aktualisierung, da dies ein Beispiel ist.
    rstTitles.CancelBatch
    rstTitles.Close

    ' Wiederherstellen der ursprünglichen Werte.
    cnn1.Execute "UPDATE titles SET type = 'psychology' " & _
        "WHERE type = 'sociology'"

    cnn1.Close

End Sub


Beispiel für die Prepared-Eigenschaft

In diesem Beispiel wird die Prepared-Eigenschaft erläutert, indem zwei Command-Objekte geöffnet werden - ein vorbereitetes und ein nicht vorbereitetes.

Public Sub PreparedX()

    Dim cnn1 As ADODB.Connection
    Dim cmd1 As ADODB.Command
    Dim cmd2 As ADODB.Command
    Dim strCnn As String
    Dim strCmd As String
    Dim sngStart As Single
    Dim sngEnd As Single
    Dim sngNotPrepared As Single
    Dim sngPrepared As Single
    Dim intLoop As Integer

    ' Öffnen einer Verbindung.
    strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"
    Set cnn1 = New ADODB.Connection
    cnn1.Open strCnn

    ' Erstellen von zwei Command-Objekten für denselben
    ' Befehl – ein vorbereitetes und ein nicht vorbereitetes.
    strCmd = "SELECT title, type FROM titles ORDER BY type"

    Set cmd1 = New ADODB.Command
    Set cmd1.ActiveConnection = cnn1
    cmd1.CommandText = strCmd

    Set cmd2 = New ADODB.Command
    Set cmd2.ActiveConnection = cnn1
    cmd2.CommandText = strCmd
    cmd2.Prepared = True

    ' Setzen eines Zeitgebers, Ausführen des unvorbereiteten
    ' Befehls 20-mal.
    sngStart = Timer
    For intLoop = 1 To 20
        cmd1.Execute
    Next intLoop
    sngEnd = Timer
    sngNotPrepared = sngEnd - sngStart

    ' Erneutes Setzen des Zeitgebers, Ausführen des vorbereiteten
    ' Befehls 20-mal.
    sngStart = Timer
    For intLoop = 1 To 20
        cmd2.Execute
    Next intLoop
    sngEnd = Timer
    sngPrepared = sngEnd - sngStart

    ' Anzeigen der Testergebnisse.
    MsgBox "Testergebnisse:" & vbCr & _
        "    Not Prepared: " & Format(sngNotPrepared, _
        "##0.000") & " Sekunden" & vbCr & _
        "    Prepared: " & Format(sngPrepared, _
        "##0.000") & " Sekunden"

    cnn1.Close

End Sub


Beispiel für die Eigenschaften Provider und DefaultDatabase

In diesem Beispiel wird die Provider-Eigenschaft erläutert, indem drei Connection-Objekte mit verschiedenen Providern geöffnet werden. Es wird auch die DefaultDatabase-Eigenschaft verwendet, um die Standarddatenbank für den Microsoft ODBC-Provider anzugeben.

Public Sub ProviderX()

    Dim cnn1 As ADODB.Connection
    Dim cnn2 As ADODB.Connection
Dim cnn3 As ADODB.Connection

    ' Öffnen einer Verbindung mit dem Microsoft ODBC-Provider.
    Set cnn1 = New ADODB.Connection
    cnn1.ConnectionString = "driver={SQL Server};" & _
        "server=bigsmile;uid=sa;pwd=pwd"
    cnn1.Open strCnn
    cnn1.DefaultDatabase = "pubs"

    ' Anzeigen des Providers.
    MsgBox "Cnn1 Provider: " & cnn1.Provider

    ' Öffnen einer Verbindung mit dem Microsoft Jet-Provider.
    Set cnn2 = New ADODB.Connection
    cnn2.Provider = "Microsoft.Jet.OLEDB.3.51"
    cnn2.Open "C:\Samples\northwind.mdb", "admin", ""

    ' Anzeigen des Providers.
    MsgBox "Cnn2 Provider: " & cnn2.Provider

   ' Öffnen einer Verbindung mit dem Microsoft SQL Server-Provider.
    Set cnn3 = New ADODB.Connection
    cnn3.Provider = "sqloledb"
    cnn3.Open "Data Source=srv;Initial Catalog=pubs;", "sa", ""

    ' Anzeigen des Providers.
    MsgBox "Cnn3 Provider: " & cnn3.Provider

    cnn1.Close
    cnn2.Close
    cnn3.Close

End Sub


Beispiel für die Eigenschaften Recordset und SourceRecordset

In dem folgenden Beispiel wird gezeigt, wie die erforderlichen Parameter für das Standardgeschäftsobjekt RDSServer.DataFactory während der Laufzeit gesetzt werden. Wenn Sie dieses Beispiel testen möchten, müssen Sie diesen Code ausschneiden und zwischen den Tags <BODY> und </BODY> in ein normales HTML-Dokument einfügen und dieses Dokument ADCapi9.asp nennen. ASP-Skript erkennt Ihren Server.

<Center><H2>RDS API-Codebeispiele</H2>
<HR>
<H3>Verwenden von SourceRecordset und Recordset mit RDSServer.DataFactory</H3>
<!-- RDS.DataSpace ID ADS1 -->
<OBJECT ID="ADS1" WIDTH=1 HEIGHT=1
CLASSID="CLSID:BD96C556-65A3-11D0-983A-00C04FC29E36">
</OBJECT>

<!-- RDS.DataControl mit während der Laufzeit gesetzten Parametern -->
<OBJECT classid="clsid:BD96C556-65A3-11D0-983A-00C04FC29E33"
    ID=ADC>
</OBJECT>

<Object CLASSID="clsid:AC05DC80-7DF1-11d0-839E-00A024A94B3A"
    CODEBASE="http://<%=Request.ServerVariables("SERVER_NAME")%>/MSADC/Samples/Sheridan.cab"
    ID=GRID1
        datasrc=#ADC
        HEIGHT=125
        WIDTH=495>
    <PARAM NAME="AllowAddNew" VALUE="TRUE">
    <PARAM NAME="AllowDelete" VALUE="TRUE">
    <PARAM NAME="AllowUpdate" VALUE="TRUE">
    <PARAM NAME="Caption" VALUE="RDSServer.DataFactory Run Time">
</OBJECT>
<HR>
<Input Size=70 Name="txtServer" Value="http://<%=Request.ServerVariables("SERVER_NAME")%>"><BR>
<Input Size=70 Name="txtConnect" Value="dsn=ADCDemo;UID=ADCDemo;PWD=ADCDemo;"><BR>
<Input Size=70 Name="txtSQL" Value="Select * from Employee">
<HR>
<INPUT TYPE=BUTTON NAME="Run" VALUE="Run"><BR>
<H4>Füllen Sie das Daten-Steuerelement mit diesem Wertem oder ändern Sie sie, um Daten aus einer anderen ODBC-Datenquelle auf dem Server zu sehen.
<BR>Try dsn=pubs;uid=sa;pwd=; and Select * From Authors</H4>
</Center>
<Script Language="VBScript">
<!--
Dim ADF
Dim strServer
strServer = "http://<%=Request.ServerVariables("SERVER_NAME")%>"

Sub Run_OnClick()
    Dim objADORs            ' Erstellen eines RDSServer.DataFactory-Objekts
Set ADF = ADS1.CreateObject("RDSServer.DataFactory", strServer)                    ' Nehmen des Recordset
Set objADORs = ADF.Query(txtConnect.Value,txtSQL.Value)

' Setzen der Parameter von RDS.DataControl während der Laufzeit
    ADC.Server = txtServer.Value
    ADC.SQL = txtSQL.Value
    ADC.Connect = txtConnect.Value
    ADC.Refresh
End Sub
-->
</Script>


Beispiel für die ReadyState-Eigenschaft

Im folgenden Beispiel wird gezeigt, wie die ReadyState-Eigenschaft des RDS.DataControl-Objekts während der Laufzeit in VBScript-Code gelesen wird. ReadyState ist eine schreibgeschützte Eigenschaft.

Wenn Sie dieses Beispiel testen möchten, müssen Sie diesen Code ausschneiden, ihn zwischen den Tags <BODY> und </BODY> in ein normales HTML-Dokument einfügen und dieses Dokument ADCapi9.asp nennen. ASP-Skript erkennt Ihren Server.

<Center><H2>RDS API-Codebeispiele </H2>
<HR>
<H3> RDS.DataControl ReadyState-Eigenschaft</H3></Center>
<!-- RDS.DataControl mit während der Entwurfszeit gesetzten Parametern -->
<OBJECT classid="clsid:BD96C556-65A3-11D0-983A-00C04FC29E33"
    ID=ADC>
    <PARAM NAME="SQL" VALUE="Select * from Employee for browse">
    <PARAM NAME="SERVER" VALUE="http://<%=Request.ServerVariables("SERVER_NAME")%>">
    <PARAM NAME="CONNECT" VALUE="dsn=ADCDemo;UID=ADCDemo;PWD=ADCDemo;">
<PARAM NAME="ExecuteOptions" VALUE="adcExecAsync">
<PARAM NAME="FetchOptions" VALUE="adcFetchAsync">
</OBJECT>

<Script Language="VBScript">

Sub Window_OnLoad
Select Case ADC1.ReadyState
    case 2: MsgBox "Abfrage wird ausgeführt"
    case 3: MsgBox "Datensätze werden im Hintergrund abgerufen"
    case 4: MsgBox "Alle Datensätze abgerufen"
End Select
End Sub
</Script>


Beispiel für die Server-Eigenschaft

In dem folgenden Code wird gezeigt, wie der RDS.DataControl-Parameter während der Entwurfszeit gesetzt wird und mit einer ODBC-Systemdatenquelle mit dem Namen ADCDemo an ein datenbezogenes Steuerelement gebunden wird. Wenn Sie gemäß den Anweisungen vorgegangen sind, ist ADCDemo auf Ihrem Server als SQL Server-ODBC-Systemdatenquelle installiert. Schneiden Sie diesen Code aus, und fügen Sie ihn zwischen den Tags <BODY> und </BODY> in ein normales HTML-Dokument ein, und nennen Sie dieses Dokument ADCapi1.asp. ASP-Skript erkennt Ihren Server.

<Center><H2>RDS API-Codebeispiele </H2>
<HR><BR>
<H3>Remote Data Service</H3>
<Object CLASSID="clsid:AC05DC80-7DF1-11d0-839E-00A024A94B3A"
    CODEBASE="http://<%=Request.ServerVariables("SERVER_NAME")%>/MSADC/Samples/Sheridan.cab"
    ID=GRID1
        datasrc=#ADC
        HEIGHT=125
        WIDTH=495>
    <PARAM NAME="AllowAddNew" VALUE="TRUE">
    <PARAM NAME="AllowDelete" VALUE="TRUE">
    <PARAM NAME="AllowUpdate" VALUE="TRUE">
</OBJECT>
<!-- Remote Data Service mit während der Entwurfszeit gesetzten Parametern -->
<OBJECT classid="clsid:BD96C556-65A3-11D0-983A-00C04FC29E33"
    ID=ADC>
    <PARAM NAME="SQL" VALUE="Select * from Employee for browse">
    <PARAM NAME="SERVER" VALUE="http://<%=Request.ServerVariables("SERVER_NAME")%>">
    <PARAM NAME="CONNECT" VALUE="dsn=ADCDemo;UID=ADCDemo;PWD=ADCDemo;">
</OBJECT><BR><HR></Center>

Im folgenden Beispiel wird gezeigt, wie die erforderlichen Parameter von RDS.DataControl während der Laufzeit gesetzt werden. Um dieses Beispiel zu testen, schneiden Sie den Code aus und fügen ihn zwischen den Tags <BODY> und </BODY> in einem einfachen HTML-Dokument wieder ein, dem Sie die Bezeichnung adcapi4.asp geben. ASP-Skript erkennt Ihren Server.

<Center><H2>RDS API-Codebeispiele </H2>
<HR><H3>Remote Data Service Server-Eigenschaft, zur Laufzeit gesetzt</H3>
<!-- RDS.DataControl ohne während der Entwurfszeit gesetzte Parameter -->
<OBJECT classid="clsid:BD96C556-65A3-11D0-983A-00C04FC29E33"
    ID=ADC>
</OBJECT>
<Object CLASSID="clsid:AC05DC80-7DF1-11d0-839E-00A024A94B3A"
    CODEBASE="http://<%=Request.ServerVariables("SERVER_NAME")%>/MSADC/Samples/Sheridan.cab"
    ID=GRID1
        datasrc=#ADC
        HEIGHT=125
        WIDTH=495>
    <PARAM NAME="AllowAddNew" VALUE="TRUE">
    <PARAM NAME="AllowDelete" VALUE="TRUE">
    <PARAM NAME="AllowUpdate" VALUE="TRUE">
    <PARAM NAME="Caption" VALUE="Remote Data Service Run Time">
</OBJECT><HR>
<Input Size=70 Name="txtServer"><BR>
<Input Size=70 Name="txtConnect" Value="dsn=ADCDemo;UID=ADCDemo;PWD=ADCDemo;">
<BR>
<Input Size=70 Name="txtSQL" Value="Select * from Employee">
<HR>
<INPUT TYPE=BUTTON NAME="Run" VALUE="Run"><BR>
<H4>Geben Sie ins obere Textfeld den Namen Ihres Web-Servers ein wie folgt: http://Meinserver</H4>
</Center>
<Script Language="VBScript">
<!--
' Setzen der Parameter von RDS.DataControl während der Laufzeit
Sub Run_OnClick
    ADC.Server = txtServer.Value
    ADC.SQL = txtSQL.Value
    ADC.Connect = txtConnect.Value
    ADC.Refresh
End Sub
-->
</Script>


Beispiel für die Source-Eigenschaft

In diesem Beispiel wird die Source-Eigenschaft erläutert, indem drei Recordset-Objekte geöffnet werden, die auf unterschiedlichen Datenquellen basieren.

Public Sub SourceX()

    Dim cnn1 As ADODB.Connection
    Dim rstTitles As ADODB.Recordset
    Dim rstPublishers As ADODB.Recordset
    Dim rstPublishersDirect As ADODB.Recordset
    Dim rstTitlesPublishers As ADODB.Recordset
    Dim cmdSQL As ADODB.Command
    Dim strCnn As String
    Dim strSQL As String

    ' Öffnen einer Verbindung.
    Set cnn1 = New ADODB.Connection
    strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"
    cnn1.Open strCnn

    ' Öffnen eines Recordset basierend auf einem Command-Objekt.
    Set cmdSQL = New ADODB.Command
    Set cmdSQL.ActiveConnection = cnn1
    cmdSQL.CommandText = "Select title, type, pubdate " & _
        "FROM titles ORDER BY title"
    Set rstTitles = cmdSQL.Execute()

    ' Öffnen eines Recordset basierend auf einer Tabelle.
    Set rstPublishers = New ADODB.Recordset
    rstPublishers.Open "publishers", strCnn, , , adCmdTable

    ' Öffnen eines Recordset basierend auf einer Tabelle.
    Set rstPublishersDirect = New ADODB.Recordset
    rstPublishersDirect.Open "publishers", strCnn, , , adCmdTableDirect

    ' Öffnen eines Recordset basierend auf einer SQL-Zeichenfolge.
    Set rstTitlesPublishers = New ADODB.Recordset
    strSQL = "SELECT title_ID AS TitleID, title AS Title, " & _
        "publishers.pub_id AS PubID, pub_name AS PubName " & _
        "FROM publishers INNER JOIN titles " & _
        "ON publishers.pub_id = titles.pub_id " & _
        "ORDER BY Title"
    rstTitlesPublishers.Open strSQL, strCnn, , , adCmdText

    ' Verwenden der Source-Eigenschaft zum Anzeigen der Quelle
    ' für jedes Recordset.
    MsgBox "rstTitles source: " & vbCr & _
        rstTitles.Source & vbCr & vbCr & _
        "rstPublishers source: " & vbCr & _
        rstPublishers.Source & vbCr & vbCr & _
        "rstPublishersDirect source: " & vbCr & _
        rstPublishersDirect.Source & vbCr & vbCr & _
        "rstTitlesPublishers source: " & vbCr & _
        rstTitlesPublishers.Source

    rstTitles.Close
    rstPublishers.Close
    rstTitlesPublishers.Close
    cnn1.Close

End Sub


Beispiel für die SQL-Eigenschaft

Der folgende Code zeigt, wie der RDS.DataControl-Parameter während der Entwurfszeit gesetzt und mit einer in SQL Server 6.5 mitgelieferten ODBC-Datenquelle mit dem Namen Pubs an ein datengebundenes Steuerelement gebunden wird.

<!-- RDS.DataControl -- >
<OBJECT classid="clsid:BD96C556-65A3-11D0-983A-00C04FC29E33" ID=ADC HEIGHT=10 WIDTH=10>
    <PARAM NAME="SQL" VALUE="Select * from Authors">
    <PARAM NAME="SERVER" VALUE="http://MyWebServer">
<PARAM NAME="CONNECT" VALUE="dsn=pubs;UID=sa;PWD=;">
</OBJECT>

<!-- Data Grid -- >
<Object CLASSID="clsid:AC05DC80-7DF1-11d0-839E-00A024A94B3A"
    CODEBASE="http://MyWebServer
/MSADC/Samples/Sheridan.cab"
    ID=GRID1
        datasrc=#ADC
        HEIGHT=125
        WIDTH=495>
    <PARAM NAME="AllowAddNew" VALUE="TRUE">
    <PARAM NAME="AllowDelete" VALUE="TRUE">
    <PARAM NAME="AllowUpdate" VALUE="TRUE">
    <PARAM NAME="BackColor"   VALUE="-2147483643">
    <PARAM NAME="BackColorOdd"  VALUE="-2147483643">
    <PARAM NAME="ForeColorEven" VALUE="0">
</OBJECT>

Im folgenden Beispiel wird gezeigt, wie die erforderlichen Parameter von RDS.DataControl während der Laufzeit gesetzt werden. Um dieses Beispiel zu testen, schneiden Sie den Code aus und fügen ihn zwischen den Tags <BODY> und </BODY> in einem einfachen HTML-Dokument wieder ein, dem Sie die Bezeichnung adcapi5.asp geben. ASP-Skript erkennt Ihren Server.

<Center><H2>RDS API-Codebeispiele </H2>
<HR><H3>Remote Data Service SQL-Eigenschaft, zur Laufzeit gesetzt</H3>

<!-- RDS.DataControl ohne während der Entwurfszeit gesetzte Parameter -->
<OBJECT classid="clsid:BD96C556-65A3-11D0-983A-00C04FC29E33"
    ID=ADC>
</OBJECT>
<Object CLASSID="clsid:AC05DC80-7DF1-11d0-839E-00A024A94B3A"
    CODEBASE="http://<%=Request.ServerVariables("SERVER_NAME")%>/MSADC/Samples/Sheridan.cab"
    ID=GRID1
        datasrc=#ADC
        HEIGHT=125
        WIDTH=495>
    <PARAM NAME="AllowAddNew" VALUE="TRUE">
    <PARAM NAME="AllowDelete" VALUE="TRUE">
    <PARAM NAME="AllowUpdate" VALUE="TRUE">
    <PARAM NAME="Caption" VALUE="Remote Data Service Run Time">
</OBJECT>
<HR>
<Input Size=70 Name="txtServer" Value= "http://<%=Request.ServerVariables("SERVER_NAME")%>">
<BR>
<Input Size=70 Name="txtConnect" Value="dsn=ADCDemo;UID=ADCDemo;PWD=ADCDemo;">
<BR>
<Input Size=70 Name="txtSQL">
<HR>
<INPUT TYPE=BUTTON NAME="Run" VALUE="Run"><BR>
<H4>Geben Sie eine SQL-Zeichenfolge ins Textfeld unten ein<BR>
Versuchen Sie ... Select * from Employee</H4>
</Center>
<Script Language="VBScript">
<!--
' Setzen der Parameter von RDS. während der Laufzeit.
Sub Run_OnClick
    ADC.Server = txtServer.Value
    ADC.SQL = txtSQL.Value
    ADC.Connect = txtConnect.Value
    ADC.Refresh
End Sub
-->
</Script>


Beispiel für die State-Eigenschaft

In diesem Beispiel wird die State-Eigenschaft zum Anzeigen einer Nachricht verwendet, während asynchrone Verbindungen geöffnet und asynchrone Befehle ausgeführt werden.

Public Sub StateX()

    Dim cnn1 As ADODB.Connection
    Dim cnn2 As ADODB.Connection
    Dim cmdChange As ADODB.Command
    Dim cmdRestore As ADODB.Command
    Dim strCnn As String

    ' Öffnen von zwei asynchronen Verbindungen, Anzeigen
    ' einer Nachricht während des Verbindungsaufbaus.
    Set cnn1 = New ADODB.Connection
    Set cnn2 = New ADODB.Connection
    strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"

    cnn1.Open strCnn, , , adAsyncConnect
    While (cnn1.State = adStateConnecting)
        Debug.Print "Erste Verbindung wird geöffnet ..."
    Wend

    cnn2.Open strCnn, , , adAsyncConnect
    While (cnn2.State = adStateConnecting)
        Debug.Print "Zweite Verbindung wird geöffnet ..."
    Wend

    ' Erstellen von zwei Command-Objekten.
    Set cmdChange = New ADODB.Command
    cmdChange.ActiveConnection = cnn1
    cmdChange.CommandText = "UPDATE titles SET type = 'self_help' " & _
        "WHERE type = 'psychology'"

    Set cmdRestore = New ADODB.Command
    cmdRestore.ActiveConnection = cnn2
    cmdRestore.CommandText = "UPDATE titles SET type = 'psychology' " & _
        "WHERE type = 'self_help'"

    ' Ausführen der Befehle, Anzeigen einer Nachricht
    ' während der Ausführung.
    cmdChange.Execute , , adAsyncExecute
    While (cmdChange.State = adStateExecuting)
        Debug.Print "Änderungsbefehl wird ausgeführt ..."
    Wend

    cmdRestore.Execute , , adAsyncExecute
    While (cmdRestore.State = adStateExecuting)
        Debug.Print "Restore-Befehl wird ausgeführt ..."
    Wend

    cnn1.Close
    cnn2.Close

End Sub


Beispiel für die Status-Eigenschaft

In diesem Beispiel wird die Status-Eigenschaft zum Anzeigen der Datensätze verwendet, die in einer Stapeloperation verändert worden sind, bevor eine Stapelaktualisierung stattgefunden hat.

Public Sub StatusX()

    Dim rstTitles As ADODB.Recordset
    Dim strCnn As String

    ' Öffnen eines Recordset für Stapelaktualisierung.
    strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"
    Set rstTitles = New ADODB.Recordset
    rstTitles.CursorType = adOpenKeyset
    rstTitles.LockType = adLockBatchOptimistic
    rstTitles.Open "titles", strCnn, , , adCmdTable

    ' Ändern des Typs der psychology-Titel.
    Do Until rstTitles.EOF
        If Trim(rstTitles!Type) = "psychology" Then
            rstTitles!Type = "self_help"
        End If
        rstTitles.MoveNext
    Loop

    ' Anzeigen der Titel-ID und des Status.
    rstTitles.MoveFirst
    Do Until rstTitles.EOF
        If rstTitles.Status = adRecModified Then
            Debug.Print rstTitles!title_id & " - Modified"
        Else
            Debug.Print rstTitles!title_id
        End If
        rstTitles.MoveNext
    Loop

    ' Abbrechen der Aktualisierung, da dies ein Beispiel ist.
    rstTitles.CancelBatch
    rstTitles.Close

End Sub


Beispiel für die Type-Eigenschaft

In diesem Beispiel wird die Type-Eigenschaft erläutert, indem der Name der Konstanten angezeigt wird, die dem Wert der Type-Eigenschaft aller Field-Objekte in der "Employee"-Tabelle entspricht. Zum Ausführen dieser Prozedur ist die FieldType-Funktion erforderlich.

Public Sub TypeX()

    Dim rstEmployees As ADODB.Recordset
    Dim fldLoop As ADODB.Field
    Dim strCnn As String

    ' Öffnen eines Recordset mit Daten der Employees-Tabelle.
    strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"
    Set rstEmployees = New ADODB.Recordset
    rstEmployees.Open "employee", strCnn, , , adCmdTable

    Debug.Print "Felder in Employee-Tabelle:" & vbCr

    ' Aufzählen der Fields-Auflistung der Employees-Tabelle.
    For Each fldLoop In rstEmployees.Fields
        Debug.Print "Name: " & fldLoop.Name & vbCr & _
            "  Type: " & FieldType(fldLoop.Type) & vbCr
    Next fldLoop

End Sub

Public Function FieldType(intType As Integer) As String

    Select Case intType
        Case adChar
            FieldType = "adChar"
        Case adVarChar
            FieldType = "adVarChar"
        Case adSmallInt
            FieldType = "adSmallInt"
        Case adUnsignedTinyInt
            FieldType = "adUnsignedTinyInt"
        Case adDBTimeStamp
            FieldType = "adDBTimeStamp"
    End Select

End Function


Beispiel für die Value-Eigenschaft

In diesem Beispiel wird die Value-Eigenschaft mit den Objekten Field und Property erläutert, indem Feld- und Eigenschaftswerte für die "Employees"-Tabelle angezeigt werden.

Public Sub ValueX()

    Dim rstEmployees As ADODB.Recordset
    Dim fldLoop As ADODB.Field
    Dim prpLoop As ADODB.Property
    Dim strCnn As String

    ' Öffnen eines Recordset mit Daten der Employees-Tabelle.
    strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"
    Set rstEmployees = New ADODB.Recordset
    rstEmployees.Open "employee", strCnn, , , adCmdTable

    Debug.Print "Field values in rstEmployees"
    ' Aufzählen der Fields-Auflistung der
    ' Employees-Tabelle.
    For Each fldLoop In rstEmployees.Fields
        ' Da Value die Standardeigenschaft eines
        ' Field-Objekts ist, ist hier das Verwenden des
        ' tatsächlichen Schlüsselwortes optional.
        Debug.Print "    " & fldLoop.Name & " = " & fldLoop.Value
    Next fldLoop

    Debug.Print "Property values in rstEmployees"
    ' Aufzählen der Properties-Anweisung des
    ' Recordset-Objekts.
    For Each prpLoop In rstEmployees.Properties
        ' Da Value die Standardeigenschaft eines
        ' Property-Objekt ist, ist hier das Verwenden des
        ' tatsächlichen Schlüsselwortes optional.

        Debug.Print "    " & prpLoop.Name & " = " & prpLoop.Value
    Next prpLoop

    rstEmployees.Close

End Sub


Beispiel für die Version-Eigenschaft

In diesem Beispiel wird die Version-Eigenschaft eines Connection-Objekts zum Anzeigen der aktuellen ADO-Version verwendet. Es werden auch verschiedene dynamische Eigenschaften verwendet, um den Namen und die Version des aktuellen DBMS, die OLE DB-Version, den Namen und die Version des Providers, den Namen und die Version des Treibers und die Version des Treibers von ODBC anzuzeigen.

Public Sub VersionX()

    Dim cnn1 As ADODB.Connection

    ' Öffnen der Verbindung.
    Set cnn1 = New ADODB.Connection
    strCnn = “driver={SQL Server};server=srv;” & _
        “user id=sa;password=;database=pubs;”
    cnn1.Open strCnn

    strVersionInfo = "ADO Version: " & cnn1.Version & vbCr & _
    "DBMS Name: " & cnn1.Properties("DBMS Name") & vbCr & _
    "DBMS Version: " & cnn1.Properties("DBMS Version") & vbCr & _
    "OLE DB Version: " & cnn1.Properties("OLE DB Version") & vbCr & _
    "Provider Name: " & cnn1.Properties("Provider Name") & vbCr & _
    "Provider Version: " & cnn1.Properties("Provider Version") & vbCr & _
    "Driver Name: " & cnn1.Properties("Driver Name") & vbCr & _
    "Driver Version: " & cnn1.Properties("Driver Version") & vbCr & _
    "Driver ODBC Version: " & cnn1.Properties("Driver ODBC Version")

    MsgBox strVersionInfo

    cnn1.Close

End Sub


Indizes der ADO-Syntax

Verwenden Sie diese Indizes als Referenz für Themen zu Objekten, Methoden, Eigenschaften und Ereignissen von ADO im Zusammenhang mit Microsoft Visual J++ oder Microsoft Visual C++.

  • Index der Syntax (ADO für VC++)

  • Index der Syntax (ADO/WFC)


Index der Syntax (ADO für VC++)

Das ADO-Sprachverzeichnis verwendet die Programmiersprache Microsoft® Visual Basic®, um die Syntax der Methoden und Eigenschaften von ADO zu erläutern. Dieser Index stellt einen Querverweis auf das ADO-Sprachverzeichnis dar, das auf Microsoft® Visual C++® basiert.

Falls Sie die #import-Anweisung in Ihrer Anwendung verwenden, wird eine Headerdatei erstellt, mit der Sie eine Syntax ähnlich der von Microsoft Visual Basic verwenden können. Eigenschaftsnamen in der Form get_Eigenschaftsname und put_Eigenschaftsname können so behandelt werden, als seien sie einfach als Eigenschaftsname deklariert. Eine Eigenschaft kann dann wie ein Datenelement statt wie eine Funktion verwendet werden.

Alle Methoden, Eigenschaften und Ereignisse sind Funktionen, die ein HRESULT zurückgeben, das Sie darauf überprüfen können, ob die Funktion erfolgreich ausgeführt wurde.

Für die folgenden Elemente wird die Syntax der dazugehörigen Methoden und Eigenschaften aufgelistet:

  • Auflistungen

  • Command-Objekt

  • Connection-Objekt

  • Error-Objekt

  • Field-Objekt

  • Parameter-Objekt

  • Recordset-Objekt


_Connection-Objekt (Syntax von ADO für VC++)

Methoden

BeginTrans(long *TransactionLevel)
CommitTrans(void)
RollbackTrans(void)

Cancel(void)

Close(void)

Execute(BSTR CommandText, VARIANT *RecordsAffected, long Options,
_ADORecordset **ppiRset)

Open(BSTR ConnectionString, BSTR UserID, BSTR Password, long Options)

OpenSchema(SchemaEnum Schema, VARIANT Restrictions, VARIANT SchemaID,
 _ADORecordset **pprset)

Eigenschaften

get_Attributes(long *plAttr)
put_Attributes(long lAttr)

get_CommandTimeout(LONG *plTimeout)
put_CommandTimeout(LONG lTimeout)

get_ConnectionString(BSTR *pbstr)
put_ConnectionString(BSTR bstr)

get_ConnectionTimeout(LONG *plTimeout)
put_ConnectionTimeout(LONG lTimeout)

get_CursorLocation(CursorLocationEnum *plCursorLoc)
put_CursorLocation(CursorLocationEnum lCursorLoc)

get_DefaultDatabase(BSTR *pbstr)
put_DefaultDatabase(BSTR bstr)

get_IsolationLevel(IsolationLevelEnum *Level)
put_IsolationLevel(IsolationLevelEnum Level)

get_Mode(ConnectModeEnum *plMode)
put_Mode(ConnectModeEnum lMode)

get_Provider(BSTR *pbstr)
put_Provider(BSTR Provider)

get_State(LONG *plObjState)

get_Version(BSTR *pbstr)

get_Errors(ADOErrors **ppvObject)

Ereignisse

BeginTransComplete(LONG TransactionLevel, ADOError *pError,
EventStatusEnum *adStatus, _ADOConnection *pConnection)

CommitTransComplete(ADOError *pError, EventStatusEnum *adStatus,
_ADOConnection *pConnection)

ConnectComplete(ADOError *pError, EventStatusEnum *adStatus,
_ADOConnection *pConnection)

Disconnect(EventStatusEnum *adStatus, _ADOConnection *pConnection)

ExecuteComplete(LONG RecordsAffected, ADOError *pError,
EventStatusEnum *adStatus, _ADOCommand *pCommand,
_ADORecordset *pRecordset, _ADOConnection *pConnection)

InfoMessage(ADOError *pError, EventStatusEnum *adStatus,
_ADOConnection *pConnection)

RollbackTransComplete(ADOError *pError, EventStatusEnum *adStatus,
_ADOConnection *pConnection)

WillConnect(BSTR *ConnectionString, BSTR *UserID, BSTR *Password,
long *Options, EventStatusEnum *adStatus,
_ADOConnection *pConnection)

WillExecute(BSTR *Source, CursorTypeEnum *CursorType,
LockTypeEnum *LockType, long *Options,
EventStatusEnum *adStatus, _ADOCommand *pCommand,
_ADORecordset *pRecordset, _ADOConnection *pConnection)


_Command-Objekt (Syntax von ADO für VC++)

Methoden

Cancel(void);

CreateParameter(BSTR Name, DataTypeEnum Type,
ParameterDirectionEnum Direction, long Size, VARIANT Value,
_ADOParameter **ppiprm);

Execute(VARIANT *RecordsAffected, VARIANT *Parameters, long Options,
_ADORecordset **ppirs);

Eigenschaften

get_ActiveConnection(_ADOConnection **ppvObject);
put_ActiveConnection(VARIANT vConn);
putref_ActiveConnection(_ADOConnection *pCon);

get_CommandText(BSTR *pbstr);
put_CommandText(BSTR bstr);

get_CommandTimeout(LONG *pl);
put_CommandTimeout(LONG Timeout);

get_CommandType(CommandTypeEnum *plCmdType);
put_CommandType(CommandTypeEnum lCmdType);

get_Name(BSTR *pbstrName);
put_Name(BSTR bstrName);

get_Prepared(VARIANT_BOOL *pfPrepared);
put_Prepared(VARIANT_BOOL fPrepared);

get_State(LONG *plObjState);

get_Parameters(ADOParameters **ppvObject);


_Parameter-Objekt (Syntax von ADO für VC++)

Methoden

AppendChunk(VARIANT Val)

Eigenschaften

get_Attributes(LONG *plParmAttribs)
put_Attributes(LONG lParmAttribs)

get_Direction(ParameterDirectionEnum *plParmDirection)
put_Direction(ParameterDirectionEnum lParmDirection)

get_Name(BSTR *pbstr)
put_Name(BSTR bstr)

get_NumericScale(BYTE *pbScale)
put_NumericScale(BYTE bScale)

get_Precision(BYTE *pbPrecision)
put_Precision(BYTE bPrecision)

get_Size(long *pl)
put_Size(long l)

get_Type(DataTypeEnum *psDataType)
put_Type(DataTypeEnum sDataType)

get_Value(VARIANT *pvar)
put_Value(VARIANT val)


_Recordset-Objekt (Syntax von ADO für VC++)

Methoden

AddNew(VARIANT FieldList, VARIANT Values)

Cancel(void)

CancelBatch(AffectEnum AffectRecords)

CancelUpdate(void)

Clone(LockTypeEnum LockType, _ADORecordset **ppvObject)

Close(void)

CompareBookmarks(VARIANT Bookmark1, VARIANT Bookmark2,
CompareEnum *pCompare)

Delete(AffectEnum AffectRecords)

Find(BSTR Criteria, LONG SkipRecords, SearchDirectionEnum SearchDirection,
VARIANT Start)

GetRows(long Rows, VARIANT Start, VARIANT Fields, VARIANT *pvar)

GetString(StringFormatEnum StringFormat, long NumRows, BSTR ColumnDelimeter,
BSTR RowDelimeter, BSTR NullExpr, BSTR *pRetString)

Move(long NumRecords, VARIANT Start)

MoveFirst(void)

MoveLast(void)

MoveNext(void)

MovePrevious(void)

NextRecordset(VARIANT *RecordsAffected, _ADORecordset **ppiRs)

Open(VARIANT Source, VARIANT ActiveConnection, CursorTypeEnum CursorType,
LockTypeEnum LockType, LONG Options)

Requery(LONG Options)

Resync(AffectEnum AffectRecords, ResyncEnum ResyncValues)

Save(BSTR FileName, PersistFormatEnum PersistFormat)

Supports(CursorOptionEnum CursorOptions, VARIANT_BOOL *pb)

Update(VARIANT Fields, VARIANT Values)

UpdateBatch(AffectEnum AffectRecords)

Eigenschaften

get_AbsolutePage(PositionEnum *pl)
put_AbsolutePage(PositionEnum Page)

get_AbsolutePosition(PositionEnum *pl)
put_AbsolutePosition(PositionEnum Position)

get_ActiveCommand(IDispatch **ppCmd)

get_ActiveConnection(VARIANT *pvar)
put_ActiveConnection(VARIANT vConn)
putref_ActiveConnection(IDispatch *pconn)

get_BOF(VARIANT_BOOL *pb)

get_Bookmark(VARIANT *pvBookmark)
put_Bookmark(VARIANT vBookmark)

get_CacheSize(long *pl)
put_CacheSize(long CacheSize)

get_CursorLocation(CursorLocationEnum *plCursorLoc)
put_CursorLocation(CursorLocationEnum lCursorLoc)

get_CursorType(CursorTypeEnum *plCursorType)
put_CursorType(CursorTypeEnum lCursorType)

get_DataMember(BSTR *pbstrDataMember)
put_DataMember(BSTR bstrDataMember)

get_DataSource(IUnknown **ppunkDataSource)
putref_DataSource(IUnknown *punkDataSource)

get_EditMode(EditModeEnum *pl)

get_EOF(VARIANT_BOOL *pb)

get_Filter(VARIANT *Criteria)
put_Filter(VARIANT Criteria)

get_LockType(LockTypeEnum *plLockType)
put_LockType(LockTypeEnum lLockType)

get_MarshalOptions(MarshalOptionsEnum *peMarshal)
put_MarshalOptions(MarshalOptionsEnum eMarshal)

get_MaxRecords(long *plMaxRecords)
put_MaxRecords(long lMaxRecords)

get_PageCount(long *pl)

get_PageSize(long *pl)
put_PageSize(long PageSize)

get_RecordCount(long *pl)

get_Sort(BSTR *Criteria)
put_Sort(BSTR Criteria)

get_Source(VARIANT *pvSource)
put_Source(BSTR bstrConn)
putref_Source(IDispatch *pcmd)

get_State(LONG *plObjState)

get_Status(long *pl)

get_StayInSync(VARIANT_BOOL *pbStayInSync)
put_StayInSync(VARIANT_BOOL bStayInSync)

get_Fields(ADOFields **ppvObject)

Verschiedenes

get_Collect(VARIANT Index, VARIANT *pvar)
put_Collect(VARIANT Index, VARIANT value)

Ereignisse

EndOfRecordset(VARIANT_BOOL *fMoreData, EventStatusEnum *adStatus,
_ADORecordset *pRecordset)

FetchComplete(ADOError *pError, EventStatusEnum *adStatus,
_ADORecordset *pRecordset)

FetchProgress(long Progress, long MaxProgress, EventStatusEnum *adStatus,
_ADORecordset *pRecordset)

FieldChangeComplete(LONG cFields, VARIANT Fields, ADOError *pError,
EventStatusEnum *adStatus, _ADORecordset *pRecordset)

MoveComplete(EventReasonEnum adReason, ADOError *pError,
EventStatusEnum *adStatus, _ADORecordset *pRecordset)

RecordChangeComplete(EventReasonEnum adReason, LONG cRecords,
ADOError *pError, EventStatusEnum *adStatus,
_ADORecordset *pRecordset)

RecordsetChangeComplete(EventReasonEnum adReason, ADOError *pError,
EventStatusEnum *adStatus, _ADORecordset *pRecordset)

WillChangeField(LONG cFields, VARIANT Fields, EventStatusEnum *adStatus,
_ADORecordset *pRecordset)

WillChangeRecord(EventReasonEnum adReason, LONG cRecords,
EventStatusEnum *adStatus, _ADORecordset *pRecordset)

WillChangeRecordset(EventReasonEnum adReason, EventStatusEnum *adStatus,
_ADORecordset *pRecordset)

WillMove(EventReasonEnum adReason, EventStatusEnum *adStatus,
_ADORecordset *pRecordset)


_Field-Objekt (Syntax von ADO für VC++)

Methoden

AppendChunk(VARIANT Data)

GetChunk(long Length, VARIANT *pvar)

Eigenschaften

get_ActualSize(long *pl)

get_Attributes(long *pl)
put_Attributes(long lAttributes)

get_DataFormat(IUnknown **ppiDF)
put_DataFormat(IUnknown *piDF)

get_DefinedSize(long *pl)
put_DefinedSize(long lSize)

get_Name(BSTR *pbstr)

get_NumericScale(BYTE *pbNumericScale)
put_NumericScale(BYTE bScale)

get_OriginalValue(VARIANT *pvar)

get_Precision(BYTE *pbPrecision)
put_Precision(BYTE bPrecision)

get_Type(DataTypeEnum *pDataType)
put_Type(DataTypeEnum DataType)

get_UnderlyingValue(VARIANT *pvar)

get_Value(VARIANT *pvar)
put_Value(VARIANT Val)


Error-Objekt (Syntax von ADO für VC++)

Eigenschaften

get_Description(BSTR *pbstr)

get_NativeError(long *pl)

get_Number(long *pl)

get_Source(BSTR *pbstr)

get_SQLState(BSTR *pbstr)


Auflistungen (Syntax von ADO für VC++)

Parameter

Methoden

Append(IDispatch *Object)

Delete(VARIANT Index)

get_Item(VARIANT Index, _ADOParameter **ppvObject)

Refresh(void)

Eigenschaften

get_Count(long *c)

Felder

Methoden

Append(BSTR bstrName, DataTypeEnum Type, long DefinedSize,
FieldAttributeEnum Attrib)

Delete(VARIANT Index)

get_Item(VARIANT Index, ADOField **ppvObject)

Refresh(void)

Eigenschaften

get_Count(long *c)

Fehler

Methoden

Clear(void)

get_Item(VARIANT Index, ADOError **ppvObject)

Refresh(void)

Eigenschaften

get_Count(long *c)


Index der Syntax (ADO/WFC)

Das ADO-Sprachverzeichnis verwendet die Programmiersprache Microsoft® Visual Basic®, um die Syntax der Methoden und Eigenschaften von ADO zu erläutern. Dieser Index stellt einen Querverweis auf die Themen des ADO-Sprachverzeichnisses dar, die auf Microsoft® Visual J++™ und ADO für Windows Foundation Classes (ADO/WFC) basieren. Verwenden Sie bei Unterschieden in der Syntax eher die Funktionssignaturen in diesem Index als die Syntaxlisten im entsprechenden Thema des Sprachverzeichnisses.

Für die folgenden Elemente wird die Syntax der dazugehörigen Methoden und Eigenschaften aufgelistet:

ActiveX-Datenobjekte

  • Auflistungen (Parameter, Felder, Fehler)

  • Command-Objekt

  • Connection-Objekt

  • Error-Objekt

  • Field-Objekt

  • Parameter-Objekt

  • Recordset-Objekt

Remote Data Service

  • DataSpace

  • ObjectProxy


Connection-Objekt (Syntax von ADO/WFC)

package com.ms.wfc.data

Konstruktor

public Connection()
public Connection(String connectionstring)

Methoden

public int beginTrans()
public void commitTrans()
public void rollbackTrans()

public void cancel()

public void close()

public com.ms.wfc.data.Recordset execute(String commandText)
public com.ms.wfc.data.Recordset execute(String commandText, int options)

public int executeUpdate(String commandText)
public int executeUpdate(String commandText, int options)

public void open()
public void open(String connectionString)
public void open(String connectionString, String userID)
public void open(String connectionString, String userID, String password)
public void open(String connectionString, String userID, String password, int options)

public Recordset openSchema(int schema, Object[] restrictions, String schemaID)
public Recordset openSchema(int schema)
public Recordset openSchema(int schema, Object[] restrictions)

Eigenschaften

public int getAttributes()
public void setAttributes(int attr)

public int getCommandTimeout()
public void setCommandTimeout(int timeout)

public String getConnectionString()
public void setConnectionString(String con)

public int getConnectionTimeout()
public void setConnectionTimeout(int timeout)

public int getCursorLocation()
public void setCursorLocation(int cursorLoc)

public String getDefaultDatabase()
public void setDefaultDatabase(String db)

public int getIsolationLevel()
public void setIsolationLevel(int level)

public int getMode()
public void setMode(int mode)

public String getProvider()
public void setProvider(String provider)

public int getState()

public String getVersion()

public AdoProperties getProperties()

public com.ms.wfc.data.Errors getErrors()

Ereignisse

Weitere Informationen über ADO/WFC-Ereignisse finden Sie unter ADO-Ereignisse in ADO/WFC.

public void addOnBeginTransComplete(ConnectionEventHandler handler)
public void removeOnBeginTransComplete(ConnectionEventHandler handler)

public void addOnCommitTransComplete(ConnectionEventHandler handler)
public void removeOnCommitTransComplete(ConnectionEventHandler handler)

public void addOnConnectComplete(ConnectionEventHandler handler)
public void removeOnConnectComplete(ConnectionEventHandler handler)

public void addOnDisconnect(ConnectionEventHandler handler)
public void removeOnDisconnect(ConnectionEventHandler handler)

public void addOnExecuteComplete(ConnectionEventHandler handler)
public void removeOnExecuteComplete(ConnectionEventHandler handler)

public void addOnInfoMessage(ConnectionEventHandler handler)
public void removeOnInfoMessage(ConnectionEventHandler handler)

public void addOnRollbackTransComplete(ConnectionEventHandler handler)
public void removeOnRollbackTransComplete(ConnectionEventHandler handler)

public void addOnWillConnect(ConnectionEventHandler handler)
public void removeOnWillConnect(ConnectionEventHandler handler)

public void addOnWillExecute(ConnectionEventHandler handler)
public void removeOnWillExecute(ConnectionEventHandler handler)


Command-Objekt (Syntax von ADO/WFC)

package com.ms.wfc.data

Konstruktor

public Command()
public Command(String commandtext)

Methoden

public void cancel()

public com.ms.wfc.data.Parameter createParameter(String Name, int Type, int Direction, int Size, Object Value)

public Recordset execute()
public Recordset execute(Object[] parameters)
public Recordset execute(Object[] parameters, int options)

public int executeUpdate(Object[] parameters)
public int executeUpdate(Object[] parameters, int options)
public int executeUpdate()

Eigenschaften

public com.ms.wfc.data.Connection getActiveConnection()
public void setActiveConnection(com.ms.wfc.data.Connection con)
public void setActiveConnection(String conString)

public String getCommandText()
public void setCommandText(String command)

public int getCommandTimeout()
public void setCommandTimeout(int timeout)

public int getCommandType()
public void setCommandType(int type)

public String getName()
public void setName(String name)

public boolean getPrepared()
public void setPrepared(boolean prepared)

public int getState()

public com.ms.wfc.data.Parameter getParameter(int n)
public com.ms.wfc.data.Parameter getParameter(String n)

public com.ms.wfc.data.Parameters getParameters()

public AdoProperties getProperties()


Parameter-Objekt (Syntax von ADO/WFC)

package com.ms.wfc.data

Konstruktor

public Parameter()
public Parameter(String name)
public Parameter(String name, int type)
public Parameter(String name, int type, int dir)
public Parameter(String name, int type, int dir, int size)
public Parameter(String name, int type, int dir, int size, Object value)

Methoden

public void appendChunk(byte[] bytes)
public void appendChunk(char[] chars)
public void appendChunk(String chars)

Eigenschaften

public int getAttributes()
public void setAttributes(int attr)

public int getDirection()
public void setDirection(int dir)

public String getName()
public void setName(String name)

public int getNumericScale()
public void setNumericScale(int scale)

public int getPrecision()
public void setPrecision(int prec)

public int getSize()
public void setSize(int size)

public int getType()
public void setType(int type)

public com.ms.com.Variant getValue()
public void setValue(Object v)

public AdoProperties getProperties()

Parameter-Zugriffsmethoden

Die Value-Eigenschaft eines Parameter-Objekts fragt den Inhalt dieses Objekts ab bzw. gibt diesen an. Der Inhalt ist als Variant dargestellt, ein Objekttyp, dem ein Wert und einer von mehreren Datentypen zugewiesen werden kann.

ADO/WFC implementiert die Value-Eigenschaft mit der getValue-Methode, die ein Objekt des Typs Variant zurückgibt, sowie mit der setValue-Methode, die einen Variant-Wert als Argument verwendet. Werte vom Typ Variant sind in bestimmten Sprachen, wie z. B. Microsoft Visual Basic, sehr effizient. Sie können jedoch in Microsoft Visual J++ eine bessere Leistung erzielen, wenn Sie systemeigene Java-Datentypen verwenden.

Zusätzlich zur Value-Eigenschaft stellt ADO/WFC Zugriffsmethoden zur Verfügung, die Java-Datentypen zum Abfragen und Festlegen des Inhalts von Parameter-Objekten verwenden. Die Namen der meisten dieser Methoden haben das Format get DataType oder set DataType.

Dabei gilt eine wichtige Ausnahme: Es gibt keine getNull-Eigenschaft; stattdessen gibt es eine isNull-Eigenschaft, die einen booleschen Wert zurückgibt, der anzeigt, ob das Feld den Wert Null hat.

public boolean getBoolean()
public void setBoolean(boolean v)

public byte getByte()
public void setByte(byte v)

public double getDouble()
public void setDouble(double v)

public float getFloat()
public void setFloat(float v)

public int getInt()
public void setInt(int v)

public long getLong()
public void setLong(long v)

public short getShort()
public void setShort(short v)

public String getString()
public void setString(String v)

public boolean isNull()
public void setNull()


Recordset-Objekt (Syntax von ADO/WFC)

package com.ms.wfc.data

Konstruktoren

public Recordset()
public Recordset(Object r)

Methoden

public void addNew(Object[] fieldList, Object[] valueList)
public void addNew(Object[] valueList)
public void addNew()

public void cancel()

public void cancelBatch(int affectRecords)
public void cancelBatch()

public void cancelUpdate()

public Object clone()
public Object clone(int lockType)

public void close()

public int compareBookmarks(Object bookmark1, Object bookmark2)

public void delete(int affectRecords)
public void delete()

public void find(String criteria)
public void find(String criteria, int SkipRecords)
public void find(String criteria, int SkipRecords, int searchDirection)
public void find(String criteria, int SkipRecords, int searchDirection, Object bmkStart)

public Object[][] getRows(int Rows, Object bmkStart, Object[] fieldList)

public void move(int numRecords)
public void move(int numRecords, Object bmkStart)

public void moveFirst()
public void moveLast()
public void moveNext()
public void movePrevious()

public Recordset nextRecordset()
public Recordset nextRecordset(int[] recordsAffected)

public void open()
public void open(Object source)
public void open(Object source, Object activeConnection)
public void open(Object source, Object activeConnection, int cursorType)
public void open(Object source, Object activeConnection, int cursorType,
int lockType)
public void open(Object source, Object activeConnection, int cursorType,
int lockType, int options)

public void requery()
public void requery(int options)

public void resync()
public void resync(int affectRecords, int resyncValues)

public void save(String fileName)
public void save(String fileName, int persistFormat)

public boolean supports(int cursorOptions)

public void update()
public void update(Object[] valueList)
public void update(Object[] fieldList, Object[] valueList)

public void updateBatch()
public void updateBatch(int affectRecords)

Eigenschaften

public int getAbsolutePage()
public void setAbsolutePage(int page)

public int getAbsolutePosition()
public void setAbsolutePosition(int pos)

public Command getActiveCommand()

public Connection getActiveConnection()
public void setActiveConnection(String conn)
public void setActiveConnection(com.ms.wfc.data.Connection c)

public boolean getBOF()

public boolean getEOF()

public Object getBookmark()
public void setBookmark(Object bmk)

public int getCacheSize()
public void setCacheSize(int size)

public int getCursorLocation()
public void setCursorLocation(int cursorLoc)

public int getCursorType()
public void setCursorType(int cursorType)

public String getDataMember()
public void setDataMember(String pbstrDataMember)

public Iunknown getDataSource()
public void setDataSource(IUnknown dataSource)

public int getEditMode()

public Object getFilter()
public void setFilter(Object filter)

public int getLockType()
public void setLockType(int lockType)

public int getMarshalOptions()
public void setMarshalOptions(int options)

public int getMaxRecords()
public void setMaxRecords(int maxRecords)

public int getPageCount()

public int getPageSize()
public void setPageSize(int pageSize)

public int getRecordCount()

public String getSort()
public void setSort(String criteria)

public String getSource()
public void setSource(String query)
public void setSource(com.ms.wfc.data.Command command)

public int getState()

public int getStatus()

public boolean getStayInSync()
public void setStayInSync(boolean pbStayInSync)

public com.ms.wfc.data.Field getField(int n)
public com.ms.wfc.data.Field getField(String n)

public com.ms.wfc.data.Fields getFields()

public AdoProperties getProperties()

Ereignisse

Weitere Informationen über ADO/WFC-Ereignisse finden Sie unter ADO-Ereignisse in ADO/WFC.

public void addOnEndOfRecordset(RecordsetEventHandler handler)
public void removeOnEndOfRecordset(RecordsetEventHandler handler)

public void addOnFetchComplete(RecordsetEventHandler handler)
public void removeOnFetchComplete(RecordsetEventHandler handler)

public void addOnFetchProgress(RecordsetEventHandler handler)
public void removeOnFetchProgress(RecordsetEventHandler handler)

public void addOnFieldChangeComplete(RecordsetEventHandler handler)
public void removeOnFieldChangeComplete(RecordsetEventHandler handler)

public void addOnMoveComplete(RecordsetEventHandler handler)
public void removeOnMoveComplete(RecordsetEventHandler handler)

public void addOnRecordChangeComplete(RecordsetEventHandler handler)
public void removeOnRecordChangeComplete(RecordsetEventHandler handler)

public void addOnRecordsetChangeComplete(RecordsetEventHandler handler)
public void removeOnRecordsetChangeComplete(RecordsetEventHandler handler)

public void addOnWillChangeField(RecordsetEventHandler handler)
public void removeOnWillChangeField(RecordsetEventHandler handler)

public void addOnWillChangeRecord(RecordsetEventHandler handler)
public void removeOnWillChangeRecord(RecordsetEventHandler handler)

public void addOnWillChangeRecordset(RecordsetEventHandler handler)
public void removeOnWillChangeRecordset(RecordsetEventHandler handler)

public void addOnWillMove(RecordsetEventHandler handler)
public void removeOnWillMove(RecordsetEventHandler handler)


Field-Objekt (Syntax von ADO/WFC)

package com.ms.wfc.data

Methoden

public void appendChunk(byte[] bytes)
public void appendChunk(char[] chars)
public void appendChunk(String chars)

public byte[] getByteChunk(int len)
public char[] getCharChunk(int len)
public String getStringChunk(int len)

Eigenschaften

public int getActualSize()

public int getAttributes()
public void setAttributes(int pl)

public com.ms.com.IUnknown getDataFormat()
public void setDataFormat(com.ms.com.IUnknown format)
(Weitere Informationen finden Sie in der Microsoft Visual J++ WFC-Referenzdokumentation für die com.ms.wfc.data.IdataFormat-Schnittstelle.)

public int getDefinedSize()
public void setDefinedSize(int pl)

public String getName()

public int getNumericScale()
public void setNumericScale(byte pbNumericScale)

public Variant getOriginalValue()

public int getPrecision()
public void setPrecision(byte pbPrecision)

public int getType()
public void setType(int pDataType)

public Variant getUnderlyingValue()

public Variant getValue()
public void setValue(Variant value)

public AdoProperties getProperties()

Field-Zugriffsmethoden

Die Value-Eigenschaft eines Field-Objekts fragt den Inhalt dieses Objekts ab bzw. gibt diesen an. Der Inhalt ist als Variant dargestellt, ein Objekttyp, dem ein Wert und einer von mehreren Datentypen zugewiesen werden kann.

ADO/WFC implementiert die Value-Eigenschaft mit der getValue-Methode, die ein Objekt des Typs Variant zurückgibt, sowie mit der setValue-Methode, die einen Variant-Wert als Argument verwendet. Werte vom Typ Variant sind in bestimmten Sprachen, wie z. B. Microsoft Visual Basic, sehr effizient. Sie können jedoch in Microsoft Visual J++ eine bessere Leistung erzielen, wenn Sie systemeigene Java-Datentypen verwenden.

Zusätzlich zur Value-Eigenschaft stellt ADO/WFC Zugriffsmethoden zur Verfügung, die Java-Datentypen zum Abfragen und Festlegen des Inhalts von Field-Objekten verwenden. Die Namen der meisten dieser Methoden haben das Format get DataType oder set DataType.

Dabei gelten zwei wichtige Ausnahmen: Eine der getObject-Methoden gibt ein in die angegebene Klasse umgewandeltes Objekt zurück. Es gibt keine getNull-Eigenschaft; stattdessen gibt es eine isNull-Eigenschaft, die einen booleschen Wert zurückgibt, der anzeigt, ob das Feld den Wert Null hat.

public native boolean getBoolean();
public void setBoolean(boolean v)

public native byte getByte();
public void setByte(byte v)

public native byte[] getBytes();
public void setBytes(byte[] v)

public native double getDouble();
public void setDouble(double v)

public native float getFloat();
public void setFloat(float v)

public native int getInt();
public void setInt(int v)

public native long getLong();
public void setLong(long v)

public native short getShort();
public void setShort(short v)

public native String getString();
public void setString(String v)

public native boolean isNull();
public void setNull()

public Object getObject()
public Object getObject(Class c)
public void setObject(Object value)


Error-Objekt (Syntax von ADO/WFC)

package com.ms.wfc.data

Eigenschaften

public String getDescription()

public int getNativeError()

public int getNumber()

public String getSource()

public String getSQLState()


Auflistungen (Syntax von ADO/WFC)

package com.ms.wfc.data

Parameter

Methoden

public void append(com.ms.wfc.data.Parameter param)

public void delete(int n)
public void delete(String s)

public void refresh()

public Parameter getItem(int n)
public Parameter getItem(String s)

Eigenschaften

public int getCount()

Felder

Methoden

public void append(String name, int type)
public void append(String name, int type, int definedSize)
public void append(String name, int type, int definedSize, int attrib)

public void delete(int n)
public void delete(String s)

public void refresh()

public com.ms.wfc.data.Field getItem(int n)
public com.ms.wfc.data.Field getItem(String s)

Eigenschaften

public int getCount()

Fehler

Methoden

public void clear()

public void refresh()

public com.ms.wfc.data.Error getItem(int n)
public com.ms.wfc.data.Error getItem(String s)

Eigenschaften

public int getCount()


DataSpace-Objekt (Syntax von ADO/WFC)

Die DataSpace-Klasse von ADO/WFC beinhaltet eine Methode, die createObject-Methode, die einen Server und ein Kommunikationsprotokoll angibt, ein Serverobjekt, das Client-Anwendungsanforderungen verarbeitet, und die ein ObjectProxy-Objekt zurückgibt, das den Server repräsentiert.

package com.ms.wfc.data

Konstruktor

public DataSpace()

Methoden

public static ObjectProxy DataSpace. createObject(String progid, String connection)

Eigenschaften

public static int getInternetTimeout()
public static void setInternetTimeout(int plInetTimeout)


ObjectProxy-Objekt (Syntax von ADO/WFC)

Ein ObjectProxy-Objekt repräsentiert einen Server und wird von der createObject-Methode des DataSpace-Objekts zurückgegeben. Die ObjectProxy-Klasse beinhaltet eine Methode, die call-Methode, die eine Methode auf dem Server aufrufen und ein aus diesem Aufruf resultierendes Objekt zurückgeben kann.

package com.ms.wfc.data

Methoden

Call-Methode (Syntax von ADO/WFC)

Ruft eine Methode auf dem vom ObjectProxy-Objekt repräsentierten Server auf. Optional können Argumente der Methode als Objektarray übergeben werden.

Syntax

public Object ObjectProxy.call( String method )
public Object ObjectProxy.call( String method, Object[] args)

Rückgabewerte

Object Ein aus dem Aufruf der Methode resultierendes Objekt.

Parameter

ObjectProxy Ein ObjectProxy-Objekt, das den Server repräsentiert.

method Eine Zeichenfolge, die den Namen der auf dem Server aufzurufenden Methode enthält.

args Optional. Ein Array mit Objekten, die Argumente der Methode auf dem Server sind. Java-Datentypen werden automatisch in für die Verwendung auf dem Server geeignete Datentypen konvertiert.


AdoEnums (Syntax von ADO/WFC)

Geben Sie, um AdoEnums zu verwenden, den vollständigen Namen der Konstanten in der Aufzählung an. Die erste Konstante in der Klasse AdoEnums.Schema ist beispielsweise AdoEnums.Schema.PROVIDERSPECIFIC.

Unter jedem Thema sind die Werte der Konstanten aufgelistet. Verwenden Sie jedoch die Namen der Konstanten, nicht die Werte. Die Werte können sich von Version zu Version ändern.

Die folgenden Tabellen enthalten drei Überschriften, die sich auf die zentrale ADO-Dokumentation beziehen.

  • Thema Diese Überschrift ist eine Verknüpfung zu dem Thema der ADO-Dokumentation, das die Aufzählungskonstante beschreibt.

  • Präfix Die Namen der ADO/WFC-Aufzählungskonstanten sind von ihren ADO-Entsprechungen abgeleitet. Aus der ADO-Dokumentation ist jedoch möglicherweise nicht ersichtlich, welche die entsprechende ADO-Konstante ist.

    Der letzte Qualifizierer in der ADO/WFC-Konstante ist ein Bezeichner, der in Großbuchstaben geschrieben ist. Die ADO-Konstante besteht aus einem Präfix, gefolgt von dem Bezeichner in gemischter Groß-/Kleinschreibung.

    Die Entsprechung der ADO/WFC-Konstante AdoEnums.Schema.PROVIDERSPECIFIC ist beispielsweise die ADO-Konstante adSchemaProviderSpecific. In diesem Fall ist das Präfix adSchema dem Bezeichner ProviderSpecific vorangestellt.

    Unter dieser Überschrift ist das Präfix aufgeführt, das Sie dem ADO/WFC-Bezeichner hinzufügen müssen, um den Namen der ADO-Aufzählungskonstante zu bilden.

  • Deklaration ADO COM-Schnittstellendateien deklarieren jede Gruppe von Aufzählungskonstanten. Diese Überschrift gibt den Namen dieser Deklaration an.

    Der Name der COM-Deklaration kann durch Anhängen von Enum an den zweiten Qualifizierer von der ADO/WFC-Konstante abgeleitet werden. Die AdoEnums.Schema.* entsprechende COM-Deklaration heißt zum Beispiel SchemaEnum.

Folgende Aufzählungen sind in ADO/WFC definiert.

AdcPropAsyncThreadPriority | DataType | ObjectState
AdcPropUpdateCriteria | EditMode | ParameterAttributes
Affect | ErrorValue | ParameterDirection
Bookmark | EventReason | PersistFormat
CommandType | EventStatus | Position
Compare | ExecuteOption | PropertyAttributes
ConnectMode | FieldAttribute | RecordStatus
ConnectOption | FilterGroup | Resync
ConnectPrompt | GetRowsOption | Schema
CursorLocation | IsolationLevel | SearchDirection
CursorOption | LockType | StringFormat
CursorType | MarshalOptions | XactAttribute


AdoEnums.AdcPropAsyncThreadPriority.*

package com.ms.wfc.data

Thema Gibt für ein RDS Recordset-Objekt die Ausführungspriorität des asynchronen Threads an, der die Daten abruft. Verwenden Sie diese Konstanten mit der dynamischen Recordset-Eigenschaft Background Thread Priority.

Präfix adPriority

Deklaration ADCPROP_ASYNCTHREADPRIORITY_ENUM

Konstante | Wert
LOWEST | 1
BELOWNORMAL | 2
NORMAL | 3
ABOVENORMAL | 4
HIGHEST | 5


AdoEnums.AdcPropUpdateCriteria.*

package com.ms.wfc.data

Thema Gibt an, welche Felder zum Erkennen von Konflikten während einer optimistischen Aktualisierung einer Zeile der Datenquelle mit einem RDS Recordset-Objekt verwendet werden können. Die Konstanten geben an, dass Kollisionen in folgenden Fällen erkannt werden sollen: Bei Änderungen am Schlüsselfeld (das heißt, wenn die Datenquellenzeile gelöscht wurde), bei Änderungen an einer beliebigen Spalte in der Datenquellenzeile, bei Änderungen an derselben Spalte der Datenquellenzeile wie der aktualisierten Spalte des Recordsets oder bei bloßem Zugriff auf die Datenquellenzeile. Verwenden Sie diese Konstanten mit der dynamischen Recordset-Eigenschaft Update Criteria.

Präfix adCriteria

Deklaration ADCPROP_UPDATECRITERIA_ENUM

Konstante | Wert
KEY | 0
ALLCOLS | 1
UPDCOLS | 2
TIMESTAMP | 3


AdoEnums.Affect.*

package com.ms.wfc.data

Thema UpdateBatch-Methode

Präfix adAffect

Deklaration AffectEnum

Konstante | Wert
CURRENT | 1
GROUP | 2
ALL | 3
ALLCHAPTERS | 4


AdoEnums.Bookmark.*

package com.ms.wfc.data

Thema Find-, GetRows-, Move-Methode

Präfix adBookmark

Deklaration BookmarkEnum

Konstante | Wert
CURRENT | 0
FIRST | 1
LAST | 2


AdoEnums.CommandType.*

package com.ms.wfc.data

Thema CommandType-Eigenschaft

Präfix adCmd

Deklaration CommandTypeEnum

Konstante | Wert
UNSPECIFIED | -1
UNKNOWN | 8
TEXT | 1
TABLE | 2
STOREDPROC | 4
FILE | 256
TABLEDIRECT | 512


AdoEnums.Compare.*

package com.ms.wfc.data

Thema CompareBookmarks-Methode

Präfix adCompare

Deklaration CompareEnum

Konstante | Wert
LESSTHAN | 0
EQUAL | 1
GREATERTHAN | 2
NOTEQUAL | 3
NOTCOMPARABLE | 4


AdoEnums.ConnectMode.*

package com.ms.wfc.data

Thema Mode-Eigenschaft

Präfix adMode

Deklaration ConnectModeEnum

Konstante | Wert
UNKNOWN | 0
READ | 1
WRITE | 2
READWRITE | 3
SHAREDENYREAD | 4
SHAREDENYWRITE | 8
SHAREEXCLUSIVE | 12
SHAREDENYNONE | 16


AdoEnums.ConnectOption.*

package com.ms.wfc.data

Thema Connect.Open-Methode (bezeichnet als OpenOptionEnum)

Präfix ad

Deklaration ConnectOptionEnum

Konstante | Wert
CONNECTUNSPECIFIED | -1
ASYNCCONNECT | 16


AdoEnums.ConnectPrompt.*

package com.ms.wfc.data

Thema Gibt an, ob ein Dialogfeld zum Eingeben fehlender Parameter angezeigt werden soll, wenn eine Verbindung mit einer ODBC-Datenquelle hergestellt wird. Die Konstanten geben an, ob das Dialogfeld immer angezeigt werden soll, oder ob es angezeigt werden soll, wenn weitere Informationen benötigt werden, oder wenn weitere Informationen benötigt werden, aber keine optionalen Parameter zulässig sind, oder ob es nie angezeigt werden soll. Verwenden Sie diese Konstanten mit der dynamischen Verbindungseigenschaft Prompt.

Präfix adPrompt

Deklaration ConnectPromptEnum

Konstante | Wert
ALWAYS | 1
COMPLETE | 2
COMPLETEREQUIRED | 3
NEVER | 4


AdoEnums.CursorLocation.*

package com.ms.wfc.data

Thema CursorLocation-Eigenschaft

Präfix adUse

Deklaration CursorLocationEnum

Konstante | Wert
NONE | 1
SERVER | 2
CLIENT | 3


AdoEnums.CursorOption.*

package com.ms.wfc.data

Thema Supports-Methode

Präfix ad

Deklaration CursorOptionEnum

Konstante | Wert
HOLDRECORDS | 256
MOVEPREVIOUS | 512
ADDNEW | 16778240
DELETE | 16779264
UPDATE | 16809984
BOOKMARK | 8192
APPROXPOSITION | 16384
UPDATEBATCH | 65536
RESYNC | 131072
NOTIFY | 262144
FIND | 524288


AdoEnums.CursorType.*

package com.ms.wfc.data

Thema CursorType-Eigenschaft

Präfix adOpen

Deklaration CursorTypeEnum

Konstante | Wert
UNSPECIFIED | -1
FORWARDONLY | 0
KEYSET | 1
DYNAMIC | 2
STATIC | 3


AdoEnums.DataType.*

package com.ms.wfc.data

Thema Append-Methode

Präfix ad

Deklaration DataTypeEnum

Konstante | Wert | Konstante | Wert | Konstante | Wert
EMPTY | 0 | DECIMAL | 14 | DBTIMESTAMP | 135
TINYINT | 16 | NUMERIC | 131 | BSTR | 8
SMALLINT | 2 | BOOLEAN | 11 | CHAR | 129
INTEGER | 3 | ERROR | 10 | VARCHAR | 200
BIGINT | 20 | USERDEFINED | 132 | LONGVARCHAR | 201
UNSIGNEDTINYINT | 17 | VARIANT | 12 | WCHAR | 130
UNSIGNEDSMALLINT | 18 | IDISPATCH | 9 | VARWCHAR | 202
UNSIGNEDINT | 19 | IUNKNOWN | 13 | LONGVARWCHAR | 203
UNSIGNEDBIGINT | 21 | GUID | 72 | BINARY | 128
SINGLE | 4 | DATE | 7 | VARBINARY | 204
DOUBLE | 5 | DBDATE | 133 | LONGVARBINARY | 205
CURRENCY | 6 | DBTIME | 134 | CHAPTER | 136


AdoEnums.EditMode.*

package com.ms.wfc.data

Thema EditMode-Eigenschaft

Präfix adEdit

Deklaration EditModeEnum

Konstante | Wert
NONE | 0
INPROGRESS | 1
ADD | 2
DELETE | 4


AdoEnums.ErrorValue.*

package com.ms.wfc.data

Thema ADO-Fehlercodes

Präfix adErr

Deklaration ErrorValueEnum

Konstante | Wert | Konstante | Wert
INVALIDARGUMENT | 3001 | OBJECTOPEN | 3705
NOCURRENTRECORD | 3021 | PROVIDERNOTFOUND | 3706
ILLEGALOPERATION | 3219 | BOUNDTOCOMMAND | 3707
INTRANSACTION | 3246 | INVALIDPARAMINFO | 3708
FEATURENOTAVAILABLE | 3251 | INVALIDCONNECTION | 3709
ITEMNOTFOUND | 3265 | NOTREENTRANT | 3710
OBJECTINCOLLECTION | 3367 | STILLEXECUTING | 3711
OBJECTNOTSET | 3420 | OPERATIONCANCELLED | 3712
DATACONVERSION | 3421 | STILLCONNECTING | 3713
OBJECTCLOSED | 3704 | NOTEXECUTING | 3715
 |  | UNSAFEOPERATION | 3716


AdoEnums.EventReason.*

package com.ms.wfc.data

Thema WillMove-, WillChangeRecord-, WillChangeRecordset-Methode

Präfix adRsn

Deklaration EventReasonEnum

Konstante | Wert | Konstante | Wert
ADDNEW | 1 | CLOSE | 9
DELETE | 2 | MOVE | 10
UPDATE | 3 | FIRSTCHANGE | 11
UNDOUPDATE | 4 | MOVEFIRST | 12
UNDOADDNEW | 5 | MOVENEXT | 13
UNDODELETE | 6 | MOVEPREVIOUS | 14
REQUERY | 7 | MOVELAST | 15
RESYNCH | 8 |  |


AdoEnums.EventStatus.*

package com.ms.wfc.data

Thema ADO-Ereignisse-Zusammenfassung

Präfix adStatus

Deklaration EventStatusEnum

Konstante | Wert
OK | 1
ERRORSOCCURRED | 2
CANTDENY | 3
CANCEL | 4
UNWANTEDEVENT | 5


AdoEnums.ExecuteOption.*

package com.ms.wfc.data

Thema Execute-Methode

Präfix ad

Deklaration ExecuteOptionEnum

Konstante | Wert
UNSPECIFIED | -1
ASYNCEXECUTE | 16
ASYNCFETCH | 32
ASYNCFETCHNONBLOCKING | 64


AdoEnums.FieldAttribute.*

package com.ms.wfc.data

Thema Attributes-Eigenschaft

Präfix adFld

Deklaration FieldAttributeEnum

Konstante | Wert
UNSPECIFIED | -1
MAYDEFER | 2
UPDATABLE | 4
UNKNOWNUPDATABLE | 8
FIXED | 16
ISNULLABLE | 32
MAYBENULL | 64
LONG | 128
ROWID | 256
ROWVERSION | 512
CACHEDEFERRED | 4096


AdoEnums.FilterGroup.*

package com.ms.wfc.data

Thema Filter-Eigenschaft

Präfix adFilter

Deklaration FilterGroupEnum

Konstante | Wert
NONE | 0
PENDINGRECORDS | 1
AFFECTEDRECORDS | 2
FETCHEDRECORDS | 3
PREDICATE | 4
CONFLICTINGRECORDS | 5


AdoEnums.GetRowsOption.*

package com.ms.wfc.data

Thema GetRows-Methode

Präfix adGetRows

Deklaration GetRowsOptionEnum

Konstante | Wert
REST | -1


AdoEnums.IsolationLevel.*

package com.ms.wfc.data

Thema IsolationLevel-Eigenschaft

Präfix adXact

Deklaration IsolationLevelEnum

Konstante | Wert
UNSPECIFIED | -1
CHAOS | 16
READUNCOMMITTED | 256
BROWSE | 256
CURSORSTABILITY | 4096
READCOMMITTED | 4096
REPEATABLEREAD | 65536
SERIALIZABLE | 1048576
ISOLATED | 1048576


AdoEnums.LockType.*

package com.ms.wfc.data

Thema LockType-Eigenschaft

Präfix adLock

Deklaration LockTypeEnum

Konstante | Wert
UNSPECIFIED | -1
READONLY | 1
PESSIMISTIC | 2
OPTIMISTIC | 3
BATCHOPTIMISTIC | 4


AdoEnums.MarshalOptions.*

package com.ms.wfc.data

Thema MarshalOptions-Eigenschaft

Präfix adMarshal

Deklaration MarshalOptionsEnum

Konstante | Wert
ALL | 0
MODIFIEDONLY | 1


AdoEnums.ObjectState.*

package com.ms.wfc.data

Thema State-Eigenschaft

Präfix adState

Deklaration ObjectStateEnum

Konstante | Wert
CLOSED | 0
OPEN | 1
CONNECTING | 2
EXECUTING | 4
FETCHING | 8


AdoEnums.ParameterAttributes.*

package com.ms.wfc.data

Thema Attributes-Eigenschaft

Präfix adParam

Deklaration ParameterAttributesEnum

Konstante | Wert
SIGNED | 16
NULLABLE | 64
LONG | 128


AdoEnums.ParameterDirection.*

package com.ms.wfc.data

Thema Direction-Eigenschaft

Präfix adParam

Deklaration ParameterDirectionEnum

Konstante | Wert
UNKNOWN | 0
INPUT | 1
OUTPUT | 2
INPUTOUTPUT | 3
RETURNVALUE | 4


AdoEnums.PersistFormat.*

package com.ms.wfc.data

Thema Save-Methode

Präfix adPersist

Deklaration PersistFormatEnum

Konstante | Wert
ADTG | 0
XML | 1


AdoEnums.Position.*

package com.ms.wfc.data

Thema AbsolutePage- und AbsolutePosition-Eigenschaft

Präfix adPos

Deklaration PositionEnum

Konstante | Wert
UNKNOWN | -1
BOF | -2
EOF | -3


AdoEnums.PropertyAttributes.*

package com.ms.wfc.data

Thema Attributes-Eigenschaft

Präfix adProp

Deklaration PropertyAttributesEnum

Konstante | Wert
NOTSUPPORTED | 0
REQUIRED | 1
OPTIONAL | 2
READ | 512
WRITE | 1024


AdoEnums.RecordStatus.*

package com.ms.wfc.data

Thema Status-Eigenschaft

Präfix adRec

Deklaration RecordStatusEnum

Konstante | Wert | Konstante | Wert
OK | 0 | CANTRELEASE | 1024
NEW | 1 | CONCURRENCYVIOLATION | 2048
MODIFIED | 2 | INTEGRITYVIOLATION | 4096
DELETED | 4 | MAXCHANGESEXCEEDED | 8192
UNMODIFIED | 8 | OBJECTOPEN | 16384
INVALID | 16 | OUTOFMEMORY | 32768
MULTIPLECHANGES | 64 | PERMISSIONDENIED | 65536
PENDINGCHANGES | 128 | SCHEMAVIOLATION | 131072
CANCELED | 256 | DBDELETED | 262144


AdoEnums.Resync.*

package com.ms.wfc.data

Thema Resync-Methode

Präfix adResync

Deklaration ResyncEnum

Konstante | Wert
UNDERLYINGVALUES | 1
ALLVALUES | 2


AdoEnums.Schema.*

package com.ms.wfc.data

Thema OpenSchema-Methode

Präfix adSchema

Deklaration SchemaEnum

Konstante | Wert | Konstante | Wert
PROVIDERSPECIFIC | -1 | STATISTICS | 19
ASSERTS | 0 | TABLES | 20
CATALOGS | 1 | TRANSLATIONS | 21
CHARACTERSETS | 2 | PROVIDERTYPES | 22
COLLATIONS | 3 | VIEWS | 23
COLUMNS | 4 | VIEWCOLUMNUSAGE | 24
CHECKCONSTRAINTS | 5 | VIEWTABLEUSAGE | 25
CONSTRAINTCOLUMNUSAGE | 6 | PROCEDUREPARAMETERS | 26
CONSTRAINTTABLEUSAGE | 7 | FOREIGNKEYS | 27
KEYCOLUMNUSAGE | 8 | PRIMARYKEYS | 28
REFERENTIALCONTRAINTS | 9 | PROCEDURECOLUMNS | 29
TABLECONSTRAINTS | 10 | DBINFOKEYWORDS | 30
COLUMNSDOMAINUSAGE | 11 | DBINFOLITERALS | 31
INDEXES | 12 | CUBES | 32
COLUMNPRIVILEGES | 13 | DIMENSIONS | 33
TABLEPRIVILEGES | 14 | HIERARCHIES | 34
USAGEPRIVILEGES | 15 | LEVELS | 35
PROCEDURES | 16 | MEASURES | 36
SCHEMATA | 17 | PROPERTIES | 37
SQLLANGUAGES | 18 | MEMBERS | 38


AdoEnums.SearchDirection.*

package com.ms.wfc.data

Thema Find-Methode

Präfix adSearch

Deklaration SearchDirectionEnum

Konstante | Wert
FORWARD | 1
BACKWARD | -1


AdoEnums.StringFormat.*

package com.ms.wfc.data

Thema GetString-Methode

Präfix ad

Deklaration StringFormatEnum

Konstante | Wert
CLIPSTRING | 2


AdoEnums.XactAttribute.*

package com.ms.wfc.data

Thema Attributes-Eigenschaft

Präfix adXact

Deklaration XactAttributeEnum

Konstante | Wert
COMMITRETAINING | 131072
ABORTRETAINING | 262144
ASYNCPHASEONE | 524288
SYNCPHASEONE | 1048576


Fehlercodes

Dieses Thema ist in Bearbeitung.

Weitere Informationen zu bestimmten Fehlermeldungen finden Sie unter den folgenden Themen:

  • ADO-Fehlercodes

  • RDS.DataControl-Fehlercodes

  • Fehlercodes von Internet Explorer

  • Fehlercodes von Internet Information Server


ADO-Fehlercodes

Zusätzlich zu den Providerfehlern, die im Error-Objekt und in der Errors-Auflistung beschrieben werden, kann auch ADO Fehler an den Fehlerbehandlungsmechanismus Ihrer Laufzeitumgebung zurückgeben. Verwenden Sie den von Ihrer Programmiersprache vorgegebenen Mechanismus, wie z. B. die On Error-Anweisung in Microsoft® Visual Basic®, zum Auffangen und Behandeln der folgenden Fehler. Es werden sowohl dezimale als auch hexadezimale Werte der Fehlercodes erläutert.

Konstantenname | Zahl | Beschreibung
AdErrInvalidArgument | 3001 0x800A0BB9 | Die Anwendung verwendet Argumente, die vom falschen Typ, außerhalb des Gültigkeitsbereichs oder miteinander in Konflikt stehend sind.
AdErrNoCurrentRecord | 3021 0x800A0BCD | Entweder BOF oder EOF ist True, oder der aktuelle Datensatz wurde gelöscht; die von der Anwendung angeforderte Operation benötigt einen aktuellen Datensatz.
AdErrIllegalOperation | 3219 0x800A0C93 | Die von der Anwendung angeforderte Operation ist in diesem Zusammenhang ungültig.
adErrInTransaction | 3246 0x800A0CAE | Die Anwendung kann ein Connection-Objekt nicht explizit während einer Transaktion schließen.
adErrFeatureNotAvailable | 3251 0x800A0CB3 | Die von der Anwendung angeforderte Operation wird von dieser Datenquelle nicht unterstützt.
adErrItemNotFound | 3265 0x800A0CC1 | ADO konnte in der Auflistung kein Objekt finden, das dem Namen oder dem Ordinalverweis entspricht, der von der Anwendung angefordert wurde.
adErrObjectInCollection | 3367 0x800A0D27 | Hinzufügen nicht möglich. Das Objekt befindet sich bereits in der Auflistung.
adErrObjectNotSet | 3420 0x800A0D5C | Die Anwendung verwendet einen Objektverweis, der nicht mehr auf ein gültiges Objekt zeigt.
adErrDataConversion | 3421 0x800A0D5D | Die Anwendung verwendet für die aktuelle Operation einen Wert vom falschen Typ.
adErrObjectClosed | 3704 0x800A0E78 | Die von der Anwendung angeforderte Operation ist für ein geschlossenes Objekt nicht erlaubt.
adErrObjectOpen | 3705 0x800A0E79 | Die von der Anwendung angeforderte Operation ist für ein geöffnetes Objekt nicht erlaubt.
adErrProviderNotFound | 3706 0x800A0E7A | ADO konnte den angegebenen Provider nicht finden.
adErrBoundToCommand | 3707 0x800A0E7B | Die Anwendung kann die ActiveConnection-Eigenschaft eines Recordset-Objekts nicht ändern, wenn dessen Quelle ein Command-Objekt ist.
adErrInvalidParamInfo | 3708 0x800A0E7C | Die Anwendung hat ein Parameter-Objekt nicht ordnungsgemäß definiert.
adErrInvalidConnection | 3709 0x800A0E7D | Die Anwendung hat eine Operation für ein Objekt angefordert, das einen Verweis auf ein geschlossenes oder ungültiges Connection-Objekt enthält.


DataControl-Fehlercodes

In der folgenden Tabelle sind die Fehlercodes des RDS.DataControl-Objekts aufgeführt. Es werden sowohl dezimale als auch hexadezimale Werte der Fehlercodes erläutert.

Fehlercodes von RDS.DataControl | Zahl | Beschreibung
IDS_UpdatesFailed | 4098 0x800A1002 | Die Datenbank konnte nicht aktualisiert werden.
IDS_CantConnect | 4099 0x800A1003 | Die Serververbindung konnte nicht hergestellt werden.
IDS_CantCreateObject | 4100 0x800A1004 | Das Geschäftsobjekt konnte nicht erstellt werden.
IDS_CantInvokeMethod | 4101 0x800A1005 | Eine Methode des Geschäftsobjekts konnte nicht ausgeführt werden.
IDS_CantFindDataspace | 4102 0x800A1006 | Die Dataspace-Eigenschaft ist ungültig.
IDS_ObjectNotSafe | 4103 0x800A1007 | Objekt nicht sicher für Skripting und Initialisierung.
IDS_RowsetNotUpdateable | 4104 0x800A1008 | Rowset nicht aktualisierbar.
IDS_BadInlineTablegram | 4105 0x800A1009 | Ungültiges Inline-Tablegram.
IDS_InvalidADCClientVersion | 4106 0x800A1010 | Ungültige RDS-Clientversion: der Client ist aktueller als der Server.
IDS_AsyncPending | 4107 0x800A1011 | Operation kann nicht ausgeführt werden, während eine asynchrone Operation auf die Bearbeitung wartet.
IDS_ResetInvalidField | 4108 0x800A1012 | Die für SortColumn oder FilterColumn angegebene Spalte ist nicht vorhanden.
IDS_RecordsetNotOpen | 4109 0x800A1013 | Das Recordset ist nicht geöffnet.
IDS_InvalidParam | 4110 0x800A1014 | Ein oder mehrere Argumente sind ungültig.
IDS_UnexpectedError | 4351 0x800A10FF | Unerwarteter Fehler.


Fehlercodes von Internet Explorer

In der folgenden Tabelle sind die Fehlercodes von Internet Explorer aufgeführt, die beim Verwenden von Remote Data Service auftreten können. Es werden sowohl dezimale als auch hexadezimale Werte der Fehlercodes erläutert.

Fehler von Internet Explorer (Wininet) | Zahl | Beschreibung
IDS_WinInet_Error | 8193 0x800A2001 | Fehler des Internetclients.
IDS_WinInet_Timeout | 8194 0x800A2002 | Internetclientfehler: Zeitlimit für Anforderung erreicht.
IDS_WinInet_CantConnect | 8195 0x800A2003 | Internetclientfehler: Serververbindung konnte nicht hergestellt werden.
IDS_WinInet_SSLPostLimitation | 8196 0x800A2004 | Internetclientfehler: SSL-Fehler (möglicherweise Übertragungslimit von 32 KB Daten).
IDS_WinInet_InvalidServerResponse | 8430 0x800A20EE | Internetclientfehler: Ungültige Serverrückmeldung.
IDS_WinInet_ConnectionReset | 12031 0x800A2EFF | Internetclientfehler: Verbindung zurückgesetzt.


Fehlercodes von Internet Information Server

In der folgenden Tabelle sind die Fehlercodes von Internet Information Server aufgeführt, die beim Verwenden von Remote Data Service auftreten können. Es werden sowohl dezimale als auch hexadezimale Werte der Fehlercodes erläutert.

Fehler von Internet Information Server | Zahl | Beschreibung
IDS_IIS_AccessDenied | 8208 0x800A2010 | Internetserverfehler: Zugriff verweigert.
IDS_IIS_ObjectNotFound | 8209 0x800A2011 | Internetserverfehler: Objekt/Modul nicht gefunden.
IDS_IIS_RequestForbidden | 8210 0x800A2012 | Internetserverfehler: Anforderung unerlaubt.
IDS_IIS_UnexpectedError | 8447 0x800A20FF | Fehler des Internetservers.


ADO-Konfigurationsinformationen

  • So gewähren Sie Gastprivilegien für einen Webserver

  • So registrieren Sie ein benutzerdefiniertes Geschäftsobjekt

  • So kennzeichnen Sie Geschäftsobjekte als "Sicher für Skripterstellung"

  • So registrieren Sie ein Geschäftsobjekt auf dem Client zur Verwendung mit DCOM

  • So ermöglichen Sie einer DLL die Ausführung in DCOM

  • Informationen über Microsoft Internet Explorer-Sicherheitsfragen


Gewähren von Gastprivilegien für einen Webserver

So gewähren Sie Gastprivilegien für einen Webserver

  1. Klicken Sie auf dem Windows NT®-Datenquellencomputer auf Start, zeigen Sie auf Programme, und klicken Sie dann auf Verwaltung (Allgemein).

  2. Führen Sie den Benutzer-Manager für Domänen aus.

  3. Klicken Sie im Menü Benutzer auf Domäne auswählen. Geben Sie den aktuellen Computernamen ein und klicken Sie auf OK.

  4. Doppelklicken Sie im unteren Fenster auf die Gruppe Gäste, und klicken Sie auf Hinzufügen, um das Konto für den Computernamen hinzuzufügen, der standardmäßig IUSR_MYWEBSVR lautet (wobei MYWEBSVR der Name Ihres Webservers ist).


Registrieren eines benutzerdefinierten Geschäftsobjekts

Um ein benutzerdefiniertes Geschäftsobjekt (.dll oder .exe) erfolgreich über den Webserver zu starten, muss die Programm-ID des Geschäftsobjekts so in die Registrierung eingegeben werden, wie in diesem Verfahren erklärt. Dieses RDS-Feature dient der Sicherheit Ihres Webservers, da nur zuvor überprüfte ausführbare Dateien gestartet werden können. Das standardmäßige Geschäftsobjekt, RDSServer.DataFactory, ist bereits vollständig registriert.

So registrieren Sie ein benutzerdefiniertes Geschäftsobjekt

  1. Klicken Sie auf Start und dann auf Ausführen.

  2. Geben Sie RegEdit ein, und klicken Sie auf OK.

  3. Gehen Sie im Registrierungs-Editor zum Registrierungsschlüssel HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W3SVC\Parameters\ADCLaunch.

  4. Wählen Sie den Schlüssel ADCLaunch aus, zeigen Sie dann im Menü Bearbeiten auf Neu, und klicken Sie auf Schlüssel.

  5. Geben Sie die Programm-ID Ihres benutzerdefinierten Geschäftsobjekts ein, und drücken Sie dann die EINGABETASTE. Lassen Sie den Eintrag Wert leer.


Kennzeichnen von Geschäftsobjekten als "Sicher für Skripterstellung"

Um eine sichere Internetumgebung zu gewährleisten, müssen Sie jedes Geschäftsobjekt, das mit der CreateObject-Methode eines RDS.DataSpace-Objekts instantiiert wurde, als "Sicher für Skripterstellung" kennzeichnen. Sie müssen sicherstellen, dass eine derartige Kennzeichnung im Lizenzbereich der Systemregistrierung vorliegt, bevor Sie diese Objekte in DCOM verwenden.

Um die Geschäftsobjekte manuell als "Sicher für Skripterstellung" zu kennzeichnen, erstellen Sie eine Textdatei mit der Erweiterung .reg, die den folgenden Text enthält. Durch die folgenden zwei Zahlen wird das "Sicher für Skripterstellung"-Feature aktiviert:

[HKEY_CLASSES_ROOT\CLSID\<MyActiveXGUID>\Implemented
Categories\{7DD95801-9882-11CF-9FA9-00AA006C42C4}]

[HKEY_CLASSES_ROOT\CLSID\<MyActiveXGUID>\Implemented
Categories\{7DD95802-9882-11CF-9FA9-00AA006C42C4}]

wobei <MyActiveXGUID> die hexadezimale GUID-Nummer des Geschäftsobjekts ist. Sie speichern sie und fügen sie in die Registrierung ein, indem Sie den Registrierungs-Editor verwenden oder indem Sie auf die .reg-Datei im Windows-Explorer doppelklicken.

Geschäftsobjekte, die in Microsoft® Visual Basic® erstellt wurden, können mit Hilfe des Assistenten zum Packen und Verteilen automatisch als "Sicher für Skripterstellung" gekennzeichnet werden. Wenn der Assistent Sie zur Angabe von Sicherheitseinstellungen auffordert, aktivieren Sie Sicher für Initialisierung und Sicher für Skripterstellung.

Im letzten Schritt erstellt der Anwendungs-Assistent eine .htm- und eine .cab-Datei. Anschließend können Sie diese beiden Dateien auf den Zielcomputer kopieren und auf die .htm-Datei doppelklicken, um die Seite zu laden und den Server richtig zu registrieren.

Da das Geschäftsobjekt standardmäßig im Verzeichnis Windows\System32\Occache installiert wird, müssen Sie es in das Verzeichnis Windows\System32 verschieben und den Registrierungsschlüssel HKEY_CLASSES_ROOT\CLSID\<MyActiveXGUID>\InprocServer32 ändern, damit der Pfad richtig ist.


Registrieren von Geschäftsobjekten auf dem Client zur Verwendung mit DCOM

Bei benutzerdefinierten Geschäftsobjekten muss sichergestellt sein, dass Ihrem Programmnamen (Programm-ID) von Seiten des Clients ein über DCOM verwendbarer Klassenbezeichner (CLSID) zugeordnet werden kann. Aus diesem Grund muss sich die Programm-ID des DCOM-Objekts in der Registrierung auf der Seite des Clients befinden und mit dem Klassenbezeichner des serverbasierten Geschäftsobjekts übereinstimmen. Bei den anderen unterstützten Protokollen (HTTP, HTTPS und prozessintern) ist dies nicht erforderlich.

Wenn Sie beispielsweise ein serverbasiertes Geschäftsobjekt mit dem Namen "MyBObj" mit einem bestimmten Klassenbezeichner, z. B. "{00112233-4455-6677-8899-00AABBCCDDEE}", offen legen möchten, müssen Sie sicherstellen, dass die folgenden Einträge in die Registrierung auf Seiten des Clients eingefügt werden:

[HKEY_CLASSES_ROOT]
\MyBObj
    \Clsid
    (Default) "{00112233-4455-6677-8899-00AABBCCDDEE}"

DCOM Stream Marshaling

Ein Clientcomputer, der RDS 1.5-Komponenten oder frühere Komponenten verwendet, ist nicht kompatibel mit einem Server, der RDS 2.0-Komponenten verwendet. Die neuere RDS 2.0-Unterstützung ist beim Transport von Recordset-Objekten viel effektiver. Trifft dies zu, können Sie den Server so einrichten, dass er mit der früheren RDS-Unterstützung (RDS 1.0 genannt) oder der neueren RDS-Unterstützung (RDS 2.0 genannt) arbeitet. Legen Sie einen der folgenden Registrierungseinträge fest:

[HKEY_CLASSES_ROOT]
\CLSID
    \[58ECEE30-E715-11CF-B0E3-00AA003F000F}
        \ADTGOptions]"MarshalFormat"="RDS10"

-oder-

[HKEY_CLASSES_ROOT]
\CLSID
    \[58ECEE30-E715-11CF-B0E3-00AA003F000F}
        \ADTGOptions]"MarshalFormat"="RDS20"


Ausführen einer DLL in DCOM

In den folgenden Schritten erfahren Sie, wie Sie eine Geschäftsobjekt -DLL befähigen, sowohl DCOM als auch Microsoft® Internet Information Server (HTTP) über Microsoft® Transaction Server zu verwenden.

  1. Erstellen Sie ein neues leeres Paket im Explorer von Transaction Server.

    Mit dem Explorer von Transaction Server können Sie ein Paket erstellen und die DLL zu diesem Paket hinzufügen. Dadurch kann auf die DLL über DCOM zugegriffen werden, wobei jedoch die Zugriffsmöglichkeit über IIS deaktiviert wird. (Wenn Sie in der Registrierung nach der DLL suchen, ist der Inproc-Schlüssel nun ohne Wert; durch Setzen des Aktivierungsattributs, das weiter unten in diesem Hilfethema erklärt wird, wird ein Wert zum Inproc-Schlüssel hinzugefügt.)

  2. Installieren Sie ein Geschäftsobjekt in diesem Paket,

    -oder-

    importieren Sie das RDSServer.DataFactory-Objekt in das Paket.

  3. Stellen Sie das Aktivierungsattribut für die Komponente auf Bibliothekspaket – Die Komponenten werden im Erstellerprozess aktiviert ein.

    Wenn auf die DLL über DCOM und IIS auf demselben Computer zugegriffen werden soll, müssen Sie das Aktivierungsattribut der Komponente im Explorer von Microsoft Transaction Server setzen. Nachdem Sie das Attribut auf Bibliothekspaket – Die Komponenten werden im Erstellerprozess aktiviert gesetzt haben, werden Sie feststellen, dass ein Inproc-Serverschlüssel in der Registrierung hinzugefügt wurde, der auf eine Ersatz-DLL von Microsoft Transaction Server zeigt.

    Siehe auch Weitere Informationen über Transaction Server und die Durchführung dieser Schritte finden Sie auf der Website von Transaction Server unter http://www.microsoft.com/transaction/ oder in der Dokumentation von Microsoft Transaction Server.


Sicherheit für ADO/RDS-Objekte im Microsoft Internet Explorer

Microsoft Internet Explorer-Sicherheitsfragen

Microsoft® Internet Explorer wurden verbesserte Sicherheitsfunktionen hinzugefügt. Einige ADO- und RDS-Objekte sind daher auf die Ausführung in einer "sicheren" Umgebung beschränkt. Sie müssen sich dieser Problematik bewusst sein, bei der verschiedene Zonen, Sicherheitsstufen, beschränktes Verhalten, unsichere Vorgänge und benutzerdefinierte Sicherheitseinstellungen eine Rolle spieen.

Weitere Informationen zu diesem Problemkreis finden Sie in dem Whitepaper "Security Issues in Microsoft Internet Explorer" auf der Website www.microsoft.com/data/techmat.htm.


ADO-Glossar

ADISAPI

Aggregatfunktion

Alias

Apartmentthread

Asynchroner Betrieb

Beständig speichern

Clientebene

Component Object Model (COM)

Cursor

Datenbezogenes Steuerelement

Datenprovider

Datenquelle

Datenquellenebene

DCOM (Distributed Component Object Model)

DLL (Dynamic Link Library)

Dynamische Eigenschaft

Einzelthreadsteuerung

Enkelaggregat (Grandchild)

Entwurfszeit

Ereignis

Ereignisbehandlungsroutine

Geschäftsregel

ISAPI

Klassenbezeichner (CLSID)

Komponente

Laufzeit

Marshaling

Microsoft Transaction Server

MIME

Mittlere Ebene

Nicht verbundenes Recordset

Objektvariable

ODBC (Open Database Connectivity)

Parametrisierte Befehle

Parent-Child-Beziehung

Proxy

Recordset

Remote Data Service

Rowset

Servicekomponente

Serviceprovider

Stub

Tablegram

Übergeordnetes Element (Parent)

Untergeordnetes Element (Child)

Variant

Verbindungspools

Webserver


Microsoft ADO-Erweiterungen für DDL und Security (ADOX) Programmer's Reference

Bei Microsoft® ActiveX® Data Objects Extensions for Data Definition Language and Security (ADOX) handelt es sich um eine Erweiterung der ADO-Objekte und des ADO-Programmiermodells. In ADOX sind Objekte zur Erstellung und Veränderung von Schemas sowie für die Sicherheit enthalten. Da es sich hierbei um einen objektbasierten Ansatz der Schemabearbeitung handelt, ist es möglich, Code zu schreiben, der mit verschiedenen Datenquellen arbeiten kann, ohne Berücksichtigung der Unterschiede ihrer jeweiligen Syntax.

ADOX ist eine Bibliothek, die die zentralen ADO-Objekte begleitet. Es basiert auf zusätzlichen Objekten zum Erstellen, Verändern und Löschen von Schemaobjekten wie z.B. Tabellen und Prozeduren. Außerdem enthält es Sicherheitsobjekte zum Verwalten von Benutzern und Gruppen sowie zum Erteilen und Widerrufen von Berechtigungen für Objekte.

Richten Sie einen Verweis auf die ADOX-Klassenbibliothek ein, um ADOX zusammen mit dem von Ihnen verwendeten Entwicklungswerkzeug einzusetzen. Die Beschreibung der ADOX-Bibliothek lautet "Microsoft ADO-Erweiterungen für DDL und Security". Der Dateiname der ADOX-Bibliothek lautet Msadox.dll, und die Programm-ID ist (ProgID) "ADOX". Weitere Informationen zum Einrichten von Verweisen auf Bibliotheken finden Sie in der Dokumentation zum Entwicklungswerkzeug.

Der Microsoft OLE DB-Provider für das Microsoft Jet-Datenbankmodul bietet vollständige Unterstützung von ADOX. Je nach Datenprovider werden einige ADOX-Funktionen möglicherweise nicht unterstützt. Weitere Informationen zu den unterstützten Funktionen von Microsoft OLE DB-Provider für ODBC, Microsoft OLE DB-Provider für Oracle oder Microsoft SQL Server OLE DB-Provider finden Sie in der Infodatei zu ADOX.

Bei diesem Dokument wird davon ausgegangen, dass Sie über gute Kenntnisse der Programmiersprache Microsoft® Visual Basic® sowie allgemeine Kenntnisse von ADO verfügen. Weitere Informationen zu ADO finden Sie unter ADO Programmer's Reference. Weitere Informationen zu ADOX finden Sie unter folgenden Themen:

  • ADOX-Objektmodell

  • ADOX-Objekte

  • ADOX-Auflistungen

  • ADOX-Eigenschaften

  • ADOX-Methoden

  • ADOX-Beispiele


ADOX-API-Verzeichnis

Dieser Abschnitt der ADOX-Dokumentation enthält Themen für alle ADOX-Objekte, -Auflistungen, -Methoden und -Eigenschaften sowie gegebenenfalls Beispielcode. Weitere Informationen finden Sie im Index unter dem betreffenden Thema oder unter den folgenden Themen:

  • ADOX-Objekte

  • ADOX-Auflistungen

  • ADOX-Methoden

  • ADOX-Eigenschaften

  • ADOX-Beispiele


ADOX-Objektmodell

Das folgende Diagramm zeigt, wie diese Objekte in ADOX dargestellt werden und in welcher Beziehung sie zueinander stehen. Weitere Informationen über ein bestimmtes Objekt oder eine bestimmte Auflistung finden Sie unter dem jeweiligen Thema des Verzeichnisses oder unter ADOX-Objekte und ADOX-Auflistungen.

Jedes der Table-, Index- und Column-Objekte verfügt auch über eine ADO-Properties-Standardauflistung.


ADOX-Objekte

ADOX-Objekte - Zusammenfassung

Objekt | Beschreibung
Catalog | Enthält Auflistungen, die den Schemakatalog einer Datenquelle beschreiben.
Column | Stellt eine Spalte einer Tabelle, eines Index oder eines Schlüssels dar.
Group | Stellt ein Gruppenkonto dar, das über Zugriffsberechtigungen innerhalb einer gesicherten Datenbank verfügt.
Index | Stellt einen Index einer Datenbanktabelle dar.
Key | Stellt das Feld eines Primär-, eines unbekannten oder eines einmaligen Schlüssels einer Datenbanktabelle dar.
Procedure | Stellt eine gespeicherte Prozedur dar.
Table | Stellt eine Datenbanktabelle einschließlich Spalten, Indizes und Schlüsseln dar.
User | Stellt ein Benutzerkonto dar, das über Zugriffsberechtigungen innerhalb einer gesicherten Datenbank verfügt.
View | Stellt eine gefilterte Menge von Datensätzen oder eine virtuelle Tabelle dar.

Die Beziehungen zwischen diesen Objekten ist im ADOX-Objektmodell abgebildet.

Jedes Objekt kann in seiner dazugehörigen Auflistung enthalten sein. So kann z.B. ein Table-Objekt in einer Tables-Auflistung enthalten sein. Weitere Informationen erhalten Sie unter ADOX-Auflistungen oder einem bestimmten Auflistungsthema.


Catalog-Objekt (ADOX)

Catalog-Objekt

Enthält Auflistungen (Tables, Views, Users, Groups und Procedures), die den Schemakatalog einer Datenquelle beschreiben.

Hinweise

Sie können das Catalog-Objekt ändern, indem Sie Objekte hinzufügen oder entfernen oder indem Sie vorhandene Objekte ändern. Einige Provider stellen möglicherweise nicht alle Catalog-Objekte zur Verfügung oder unterstützen möglicherweise nur das Anzeigen von Schemainformationen.

Mit den Eigenschaften und Methoden eines Catalog-Objekts können Sie:

  • Den Katalog öffnen, indem Sie die ActiveConnection-Eigenschaft auf ein ADO-Connection-Objekt oder eine gültige Verbindungszeichenfolge festlegen.

  • Einen neuen Katalog mit der Create-Methode erstellen.

  • Die Eigentümer der Objekte in einem Catalog-Objekt mit den GetObjectOwner- und SetObjectOwner-Methoden bestimmen.


Column-Objekt (ADOX)

Column-Objekt

Stellt eine Spalte einer Tabelle, eines Index oder eines Schlüssels dar.

Hinweise

Der folgende Code erstellt ein neues Column-Objekt:

Dim obj As New Column

Mit den Eigenschaften und Methoden eines Column-Objekts können Sie:

  • Die Spalte mit der Name-Eigenschaft identifizieren.

  • Den Datentyp der Spalte mit der Type-Eigenschaft angeben.

  • Mit der Attributes-Eigenschaft bestimmen, ob die Spalte eine feste Länge hat oder ob sie Nullwerte enthalten kann.

  • Die maximale Größe der Spalte mit der DefinedSize-Eigenschaft angeben.

  • Für numerische Datenwerte die Skalierung mit der NumericScale-Eigenschaft angeben.

  • Für numerische Datenwerte die maximale Präzision mit der Precision-Eigenschaft angeben.

  • Mit der ParentCatalog-Eigenschaft das Catalog-Objekt angeben, das Eigentümer der Spalte ist.

  • Für Schlüsselspalten den Namen der verbundenen Spalte in der verbundenen Tabelle mit der RelatedColumn-Eigenschaft angeben.

  • Für Indexspalten mit der SortOrder-Eigenschaft angeben, ob die Sortierreihenfolge aufsteigend oder absteigend ist.

  • Auf providerspezifische Eigenschaften mit der Properties-Auflistung zugreifen.


Group-Objekt (ADOX)

Group-Objekt

Stellt ein Gruppenkonto dar, das über Zugriffsberechtigungen innerhalb einer gesicherten Datenbank verfügt.

Hinweise

Die Groups-Auflistung eines Catalog-Objekts stellt alle Gruppenkonten des Katalogs dar. Die Groups-Auflistung eines User-Objekts stellt nur die Gruppe dar, zu der der Benutzer gehört.

Mit den Eigenschaften, Auflistungen und Methoden eines Group-Objekts können Sie:

  • Die Gruppe mit der Name-Eigenschaft identifizieren.

  • Mit den GetPermissions- und SetPermissions-Methoden bestimmen, ob eine Gruppe über Schreib-, Lese- oder Löschberechtigungen verfügt.

  • Mit der Users-Auflistung auf die Benutzerkonten zugreifen, die Mitglieder der Gruppe sind.


Index-Objekt (ADOX)

Index-Objekt

Stellt einen Index einer Datenbanktabelle dar.

Hinweise

Der folgende Code erstellt ein neues Index-Objekt:

Dim obj As New Index

Mit den Eigenschaften und Methoden eines Index-Objekts können Sie:

  • Den Index mit der Name-Eigenschaft identifizieren.

  • Auf die Datenbankspalten des Index mit der Columns-Auflistung zugreifen.

  • Mit der Unique-Eigenschaft angeben, ob die Indexschlüssel einmalig sein müssen.

  • Mit der PrimaryKey-Eigenschaft angeben, ob es sich bei dem Index um den Primärschlüssel einer Tabelle handelt.

  • Mit der IndexNulls-Eigenschaft angeben, ob Datensätze mit Null-Werten in den Indexfeldern Indexeinträge aufweisen.

  • Mit der Clustered-Eigenschaft angeben, ob der Index gruppiert ist.

  • Mit der ParentCatalog-Eigenschaft das Catalog-Objekt angeben, das Eigentümer des Index ist.

  • Auf providerspezifische Indexeigenschaften mit der Properties-Auflistung zugreifen.

    Anmerkung Ein Fehler tritt auf, wenn ein Column-Objekt an die Columns-Auflistung eines Index-Objekts angehängt wird, falls das Column-Objekt noch nicht in einem Table-Objekt existiert, das bereits an die Tables-Auflistung angehängt wurde.


Key-Objekt (ADOX)

Key-Objekt

Stellt das Feld eines Primär-, eines unbekannten oder eines einmaligen Schlüssels einer Datenbanktabelle dar.

Hinweise

Der folgende Code erstellt ein neues Key-Objekt:

Dim obj As New Key

Mit den Eigenschaften und Methoden eines Key-Objekts können Sie:

  • Den Schlüssel mit der Name-Eigenschaft identifizieren.

  • Mit der Type-Eigenschaft bestimmen, ob es sich bei dem Schlüssel um einen Primär-, einen unbekannten oder einen einmaligen Schlüssel handelt.

  • Auf die Datenbankspalten des Schlüssels mit der Columns-Auflistung zugreifen.

  • Den Namen der verbundenen Tabelle mit der RelatedTable-Eigenschaft angeben.

  • Mit den DeleteRule- und UpdateRule-Eigenschaften bestimmen, welche Aktion beim Löschen oder Aktualisieren eines Primärschlüssels durchgeführt werden soll.


Procedure-Objekt (ADOX)

Procedure-Objekt

Stellt eine gespeicherte Prozedur dar. Wenn es in Verbindung mit dem ADO-Command-Objekt verwendet wird, kann das Procedure-Objekt zum Hinzufügen, Löschen oder Ändern gespeicherter Prozeduren verwendet werden.

Hinweise

Das Procedure-Objekt ermöglicht es Ihnen, eine gespeicherte Prozedur zu erstellen, ohne dass Sie die "CREATE PROCEDURE"-Syntax des Providers kennen oder verwenden müssen.

Mit den Eigenschaften und Methoden eines Procedure-Objekts können Sie:

  • Die Prozedur mit der Name-Eigenschaft identifizieren.

  • Mit der Command-Eigenschaft das ADO-Command-Objekt angeben, das zum Erstellen oder Ausführen der Prozedur verwendet werden kann.

  • Datumsinformationen mit den DateCreated- und DateModified-Eigenschaften zurückgeben.


Table-Objekt (ADOX)

Table-Objekt

Stellt eine Datenbanktabelle einschließlich Spalten, Indizes und Schlüsseln dar.

Hinweise

Der folgende Code erstellt ein neues Table-Objekt:

Dim obj As New Table

Mit den Eigenschaften und Methoden eines Table-Objekts können Sie:

  • Die Tabelle mit der Name-Eigenschaft identifizieren.

  • Den Tabellentyp mit der Type-Eigenschaft bestimmen.

  • Auf die Datenbankspalten der Tabelle mit der Columns-Auflistung zugreifen.

  • Auf die Indizes der Tabelle mit der Indexes-Auflistung zugreifen.

  • Auf die Schlüssel der Tabelle mit der Keys-Auflistung zugreifen.

  • Mit der ParentCatalog-Eigenschaft das Catalog-Objekt angeben, das Eigentümer der Tabelle ist.

  • Datumsinformationen mit den DateCreated- und DateModified-Eigenschaften zurückgeben.

  • Auf providerspezifische Tabelleneigenschaften mit der Properties-Auflistung zugreifen.


User-Objekt (ADOX)

User-Objekt

Stellt ein Benutzerkonto dar, das über Zugriffsberechtigungen innerhalb einer gesicherten Datenbank verfügt.

Hinweise

Die Users-Auflistung eines Catalog-Objekts stellt alle Benutzer des Katalogs dar. Die Users-Auflistung eines Group-Objekts stellt nur die Benutzer der betreffenden Gruppe dar.

Mit den Eigenschaften, Auflistungen und Methoden eines User-Objekts können Sie:

  • Den Benutzer mit der Name-Eigenschaft identifizieren.

  • Das Kennwort eines Benutzers mit der ChangePassword-Methode ändern.

  • Mit den GetPermissions- und SetPermissions-Methoden bestimmen, ob ein Benutzer über Schreib-, Lese- oder Löschberechtigungen verfügt.

  • Mit der Groups-Auflistung auf die Gruppen zugreifen, zu denen ein Benutzer gehört.


View-Objekt (ADOX)

View-Objekt

Stellt eine gefilterte Menge von Datensätzen oder eine virtuelle Tabelle dar. Wenn es in Verbindung mit dem ADO-Command-Objekt verwendet wird, kann das View-Objekt zum Hinzufügen, Löschen oder Ändern von Ansichten verwendet werden.

Hinweise

Eine Ansicht ist eine virtuelle Tabelle, die aus anderen Datenbanktabellen oder Ansichten erstellt wurde. Das View-Objekt ermöglicht es Ihnen, eine Ansicht zu erstellen, ohne dass Sie die "CREATE VIEW"-Syntax des Providers kennen oder verwenden müssen.

Mit den Eigenschaften und Methoden eines View-Objekts können Sie:

  • Die Ansicht mit der Name-Eigenschaft identifizieren.

  • Mit der Command-Eigenschaft das ADO-Command-Objekt angeben, das zum Hinzufügen, Löschen oder Ändern von Ansichten verwendet werden kann.

  • Datumsinformationen mit den DateCreated- und DateModified-Eigenschaften zurückgeben.


ADOX-Auflistungen

ADOX-Auflistungen - Zusammenfassung

Auflistung | Beschreibung
Columns | Enthält alle Column-Objekte einer Tabelle, eines Index oder eines Schlüssels.
Groups | Enthält alle gespeicherten Group-Objekte eines Katalogs oder Benutzers.
Indexes | Enthält alle Index-Objekte einer Tabelle.
Keys | Enthält alle Key-Objekte einer Tabelle.
Procedures | Enthält alle Procedure-Objekte eines Katalogs.
Tables | Enthält alle Table-Objekte eines Katalogs.
Users | Enthält alle gespeicherten User-Objekte eines Katalogs oder einer Gruppe.
Views | Enthält alle View-Objekte eines Katalogs.


Columns-Auflistung (ADOX)

Columns-Auflistung

Enthält alle Column-Objekte einer Tabelle, eines Index oder eines Schlüssels.

Hinweise

Die Append-Methode für eine Columns-Auflistung ist eine Eigenheit von ADOX. Sie können:

  • Der Auflistung mit der Append-Methode eine neue Spalte hinzufügen.

Die übrigen Eigenschaften und Methoden gehören zum Standard der ADO-Auflistungen. Sie können:

  • Auf eine Spalte in der Auflistung mit der Item-Methode zugreifen.

  • Die Anzahl der in der Auflistung enthaltenen Spalten mit der Count-Eigenschaft zurückgeben.

  • Eine Spalte mit der Delete-Methode aus der Auflistung entfernen.

  • Die Objekte in der Auflistung mit der Refresh-Methode aktualisieren, um das Schema der aktuellen Datenbank anzuzeigen.

    Anmerkung Ein Fehler tritt auf, wenn ein Column-Objekt an die Columns-Auflistung eines Index-Objekts angehängt wird, falls das Column-Objekt noch nicht in einem Table-Objekt existiert, das bereits an die Tables-Auflistung angehängt wurde.


Groups-Auflistung (ADOX)

Groups-Auflistung

Enthält alle gespeicherten Group-Objekte eines Katalogs oder Benutzers.

Hinweise

Die Groups-Auflistung eines Catalog-Objekts stellt alle Gruppenkonten des Katalogs dar. Die Groups-Auflistung eines User-Objekts stellt nur die Gruppe dar, zu der der Benutzer gehört.

Die Append-Methode für eine Groups-Auflistung ist eine Eigenheit von ADOX. Sie können:

  • Der Auflistung mit der Append-Methode eine neue Sicherheitsgruppe hinzufügen.

Die übrigen Eigenschaften und Methoden gehören zum Standard der ADO-Auflistungen. Sie können:

  • Auf eine Gruppe in der Auflistung mit der Item-Methode zugreifen.

  • Die Anzahl der in der Auflistung enthaltenen Gruppen mit der Count-Eigenschaft zurückgeben.

  • Eine Gruppe mit der Delete-Methode aus der Auflistung entfernen.

  • Die Objekte in der Auflistung mit der Refresh-Methode aktualisieren, um das Schema der aktuellen Datenbank anzuzeigen.

    Anmerkung Vor dem Anhängen eines Group-Objekts an die Groups-Auflistung eines User-Objekts muss in der Groups-Auflistung des Catalog-Objekts bereits ein Group-Objekt mit dem gleichen Namen wie das anzuhängende Objekt existieren.


Index-Auflistung (ADOX)

Index-Auflistung

Enthält alle Index-Objekte einer Tabelle.

Hinweise

Die Append-Methode für eine Index-Auflistung ist eine Eigenheit von ADOX. Sie können:

  • Der Auflistung mit der Append-Methode einen neuen Index hinzufügen.

Die übrigen Eigenschaften und Methoden gehören zum Standard der ADO-Auflistungen. Sie können:

  • Auf einen Index in der Auflistung mit der Item-Methode zugreifen.

  • Die Anzahl der in der Auflistung enthaltenen Indizes mit der Count-Eigenschaft zurückgeben.

  • Einen Index mit der Delete-Methode aus der Auflistung entfernen.

  • Die Objekte in der Auflistung mit der Refresh-Methode aktualisieren, um das Schema der aktuellen Datenbank anzuzeigen.


Keys-Auflistung (ADOX)

Keys-Auflistung

Enthält alle Key-Objekte einer Tabelle.

Hinweise

Die Append-Methode für eine Keys-Auflistung ist eine Eigenheit von ADOX. Sie können:

  • Der Auflistung mit der Append-Methode einen neuen Schlüssel hinzufügen.

Die übrigen Eigenschaften und Methoden gehören zum Standard der ADO-Auflistungen. Sie können:

  • Auf einen Schlüssel in der Auflistung mit der Item-Methode zugreifen.

  • Die Anzahl der in der Auflistung enthaltenen Schlüssel mit der Count-Eigenschaft zurückgeben.

  • Einen Schlüssel mit der Delete-Methode aus der Auflistung entfernen.

  • Die Objekte in der Auflistung mit der Refresh-Methode aktualisieren, um das Schema der aktuellen Datenbank anzuzeigen.


Procedures-Auflistung (ADOX)

Procedures-Auflistung

Enthält alle Procedure-Objekte eines Katalogs.

Hinweise

Die Append-Methode für eine Procedures-Auflistung ist eine Eigenheit von ADOX. Sie können:

  • Der Auflistung mit der Append-Methode eine neue Prozedur hinzufügen.

Die übrigen Eigenschaften und Methoden gehören zum Standard der ADO-Auflistungen. Sie können:

  • Auf eine Prozedur in der Auflistung mit der Item-Methode zugreifen.

  • Die Anzahl der in der Auflistung enthaltenen Prozeduren mit der Count-Eigenschaft zurückgeben.

  • Eine Prozedur mit der Delete-Methode aus der Auflistung entfernen.

  • Die Objekte in der Auflistung mit der Refresh-Methode aktualisieren, um das Schema der aktuellen Datenbank anzuzeigen.


Tables-Auflistung (ADOX)

Tables-Auflistung

Enthält alle Table-Objekte eines Katalogs.

Hinweise

Die Append-Methode für eine Tables-Auflistung ist eine Eigenheit von ADOX. Sie können:

  • Der Auflistung mit der Append-Methode eine neue Tabelle hinzufügen.

Die übrigen Eigenschaften und Methoden gehören zum Standard der ADO-Auflistungen. Sie können:

  • Auf eine Tabelle in der Auflistung mit der Item-Methode zugreifen.

  • Die Anzahl der in der Auflistung enthaltenen Tabellen mit der Count-Eigenschaft zurückgeben.

  • Eine Tabelle mit der Delete-Methode aus der Auflistung entfernen.

  • Die Objekte in der Auflistung mit der Refresh-Methode aktualisieren, um das Schema der aktuellen Datenbank anzuzeigen.


Users-Auflistung (ADOX)

Users-Auflistung

Enthält alle gespeicherten User-Objekte eines Katalogs oder einer Gruppe.

Hinweise

Die Users-Auflistung eines Catalog-Objekts stellt alle Benutzer des Katalogs dar. Die Users-Auflistung einer Gruppe stellt nur die Benutzer dar, die Mitglied der betreffenden Gruppe sind.

Die Append-Methode für eine Users-Auflistung ist eine Eigenheit von ADOX. Sie können:

  • Der Auflistung mit der Append-Methode einen neuen Benutzer hinzufügen.

Die übrigen Eigenschaften und Methoden gehören zum Standard der ADO-Auflistungen. Sie können:

  • Die Anzahl der in der Auflistung enthaltenen Benutzer mit der Count-Eigenschaft zurückgeben.

  • Auf einen Benutzer in der Auflistung mit der Item-Methode zugreifen.

  • Einen Benutzer mit der Delete-Methode aus der Auflistung entfernen.

  • Die Objekte in der Auflistung mit der Refresh-Methode aktualisieren, um das Schema der aktuellen Datenbank anzuzeigen.

    Anmerkung Vor dem Anhängen eines User-Objekts an die Users-Auflistung eines Group-Objekts muss in der Users-Auflistung des Catalog-Objekts bereits ein User-Objekt mit dem gleichen Namen wie das anzuhängende Objekt existieren.


Views-Auflistung (ADOX)

Views-Auflistung

Enthält alle View-Objekte eines Katalogs.

Hinweise

Die Append-Methode für eine Views-Auflistung ist eine Eigenheit von ADOX. Sie können:

  • Der Auflistung mit der Append-Methode eine neue Ansicht hinzufügen.

Die übrigen Eigenschaften und Methoden gehören zum Standard der ADO-Auflistungen. Sie können:

  • Auf eine Ansicht in der Auflistung mit der Item-Methode zugreifen.

  • Die Anzahl der in der Auflistung enthaltenen Ansichten mit der Count-Eigenschaft zurückgeben.

  • Eine Ansicht mit der Delete-Methode aus der Auflistung entfernen.

  • Die Objekte in der Auflistung mit der Refresh-Methode aktualisieren, um das Schema der aktuellen Datenbank anzuzeigen.


ADOX-Methoden

Zusammenfassung der Methoden für ADOX

Methode | Beschreibung
Append (Columns) | Fügt der Columns-Auflistung ein neues Column-Objekt hinzu.
Append (Groups) | Fügt der Groups-Auflistung ein neues Group-Objekt hinzu.
Append (Index) | Fügt der Index-Auflistung ein neues Index-Objekt hinzu.
Append (Keys) | Fügt der Keys-Auflistung ein neues Key-Objekt hinzu.
Append (Procedures) | Fügt der Procedures-Auflistung ein neues Procedure-Objekt hinzu.
Append (Tables) | Fügt der Tables-Auflistung ein neues Table-Objekt hinzu.
Append (Users) | Fügt der Users-Auflistung ein neues User-Objekt hinzu.
Append (Views) | Fügt der Views-Auflistung ein neues View-Objekt hinzu.
ChangePassword | Ändert das Kennwort für ein Benutzerkonto.
Create | Erstellt einen neuen Katalog.
Delete | Entfernt ein Objekt aus einer Auflistung.
GetObjectOwner | Gibt den Eigentümer eines Objekts in einem Katalog zurück.
GetPermissions | Fragt die Berechtigungen einer Gruppe oder eines Benutzers für ein Objekt ab.
Item | Gibt ein bestimmtes Element einer Auflistung nach Namen oder Ordinalzahl zurück.
Refresh | Aktualisiert die Objekte in einer Auflistung, um Objekte aufzunehmen, die vom Provider erhältlich oder spezifisch für ihn sind.
SetObjectOwner | Gibt den Eigentümer eines Objekts in einem Katalog an.
SetPermissions | Legt die Berechtigungen einer Gruppe oder eines Benutzers für ein Objekt fest.


Append-Methode (ADOX, Columns)

Append-Methode (Columns)

Fügt der Columns-Auflistung ein Column-Objekt hinzu.

Syntax

Columns.Append Column [, Type] [, DefinedSize]

Parameter

Column Das anzuhängende Column-Objekt oder der Name der Spalte, die erstellt und angehängt werden soll.

Type Optional. Ein Long-Wert, der den Datentyp der Spalte angibt. Der Parameter Type entspricht der Type-Eigenschaft eines Column-Objekts.

DefinedSize Optional. Ein Long-Wert, der die Größe der Spalte angibt. Der Parameter DefinedSize entspricht der DefinedSize-Eigenschaft eines Column-Objekts.

Anmerkung Ein Fehler tritt auf, wenn ein Column-Objekt an die Columns-Auflistung eines Index angehängt wird, falls das Column-Objekt noch nicht in einer Tabelle existiert, die bereits an die Tables-Auflistung angehängt wurde.


Append-Methode (ADOX, Groups)

Append-Methode (Groups)

Fügt der Groups-Auflistung ein neues Group-Objekt hinzu.

Syntax

Groups.Append Group

Parameter

Group Das anzuhängende Group-Objekt oder der Name der Gruppe, die erstellt und angehängt werden soll.

Hinweise

Die Groups-Auflistung eines Katalogs stellt alle Gruppenkonten des Katalogs dar. Die Groups-Auflistung eines Benutzers stellt nur die Gruppe dar, zu der der Benutzer gehört.

Ein Fehler tritt auf, wenn der Provider das Erstellen von Gruppen nicht unterstützt.

Anmerkung Vor dem Anhängen eines Group-Objekts an die Groups-Auflistung eines User-Objekts muss in der Groups-Auflistung des Catalog-Objekts bereits ein Group-Objekt mit dem gleichen Namen wie das anzuhängende Objekt existieren.


Append-Methode (ADOX, Index)

Append-Methode (Index)

Fügt der Indexes-Auflistung ein neues Index-Objekt hinzu.

Syntax

Indexes.Append Index [, Columns]

Parameter

Index Das anzuhängende Index-Objekt oder der Name des Index, der erstellt und angehängt werden soll.

Columns Optional. Ein Variant-Wert, der den/die Namen der zu indizierenden Spalte(n) angibt. Der Parameter Columns entspricht dem Wert/den Werten der Name-Eigenschaft eines Column-Objekts oder mehrerer solcher Objekte.

Hinweise

Der Parameter Columns kann entweder einen Spaltennamen oder ein Array von Spaltennamen verwenden.

Ein Fehler tritt auf, wenn der Provider das Erstellen von Indizes nicht unterstützt.


Append-Methode (ADOX, Keys)

Append-Methode (Keys)

Fügt der Keys-Auflistung ein neues Key-Objekt hinzu.

Syntax

Keys.Append Key [, KeyType] [, Column] [, RelatedTable]

Parameter

Key Das anzuhängende Key-Objekt oder der Name des Schlüssels, der erstellt und angehängt werden soll.

KeyType Optional. Ein Long-Wert, der den Schlüsseltyp angibt. Der Parameter Key entspricht der Type-Eigenschaft eines Key-Objekts.

Column Optional. Ein String-Wert, der den Namen der zu indizierenden Spalte angibt. Der Parameter Columns entspricht dem Wert der Name-Eigenschaft eines Column-Objekts.

RelatedTable Optional. Ein String-Wert, der den Namen der verbundenen Tabelle angibt. Der Parameter RelatedTable entspricht dem Wert der Name-Eigenschaft eines Table-Objekts.

Hinweise

Der Parameter Columns kann entweder einen Spaltennamen oder ein Array von Spaltennamen verwenden.


Append-Methode (ADOX, Procedures)

Append-Methode (Procedures)

Fügt der Procedures-Auflistung ein neues Procedure-Objekt hinzu.

Syntax

Procedures.Append Name, Command

Parameter

Name Ein String-Wert, der den Namen der Prozedur angibt, die erstellt und angehängt werden soll.

Command Ein ADO-Command-Objekt, das die Prozedur darstellt, die erstellt und angehängt werden soll.

Hinweise

Erstellt eine neue Prozedur in der Datenquelle mit dem Namen und den Attributen, die in dem Command-Objekt angegeben sind.

Wenn der vom Benutzer angegebene Befehlstext eine Ansicht statt einer Prozedur darstellt, tritt ein Fehler auf, und der Befehl wird nicht in der Datenquelle gespeichert oder der Auflistung hinzugefügt.

Die Append-Methode schlägt fehl, wenn der Provider keine beständigen Befehle unterstützt.


Append-Methode (ADOX, Tables)

Append-Methode (Tables)

Fügt der Tables-Auflistung ein neues Table-Objekt hinzu.

Syntax

Tables.Append Table

Parameter

Table Ein Variant-Wert, der einen Verweis auf das anzuhängende Table-Objekt oder den Namen der zu erstellenden und anzuhängenden Tabelle enthält.

Hinweise

Ein Fehler tritt auf, wenn der Provider das Erstellen von Tabellen nicht unterstützt.


Append-Methode (ADOX, Users)

Append-Methode (Users)

Fügt der Users-Auflistung ein neues User-Objekt hinzu.

Syntax

Users.Append User[, Password]

Parameter

User Ein Variant-Wert, der das anzuhängende User-Objekt oder den Namen des zu erstellenden und anzuhängenden Benutzers enthält.

Kennwort Optional. Ein String-Wert, der das Kennwort für den Benutzer enthält. Der Parameter Password entspricht dem von der ChangePassword-Methode eines User-Objekts angegebenen Wert.

Hinweise

Die Users-Auflistung eines Katalogs stellt alle Benutzer des Katalogs dar. Die Users-Auflistung einer Gruppe stellt nur die Benutzer dar, die Mitglied der betreffenden Gruppe sind.

Ein Fehler tritt auf, wenn der Provider das Erstellen von Benutzern nicht unterstützt.

Anmerkung Vor dem Anhängen eines User-Objekts an die Users-Auflistung eines Group-Objekts muss in der Users-Auflistung des Catalog-Objekts bereits ein User-Objekt mit dem gleichen Namen wie das anzuhängende Objekt existieren.


Append-Methode (ADOX, Views)

Append-Methode (Views)

Erstellt ein neues View-Objekt und hängt es an die Views-Auflistung an.

Syntax

Views.Append Name, Command

Parameter

Name Ein String-Wert, der den Namen der zu erstellenden Ansicht angibt.

Command Ein ADO-Command-Objekt, das die zu erstellende Ansicht darstellt.

Hinweise

Erstellt eine neue Ansicht in der Datenquelle mit dem Namen und den Attributen, die in dem Command-Objekt angegeben sind.

Wenn der vom Benutzer angegebene Befehlstext eine Prozedur statt einer Ansicht darstellt, tritt ein Fehler auf, und der Befehl wird nicht in der Datenquelle gespeichert oder der Auflistung hinzugefügt.

Die Append-Methode schlägt fehl, wenn der Provider keine beständigen Befehle unterstützt.


ChangePassword-Methode (ADOX)

ChangePassword-Methode

Ändert das Kennwort für ein Benutzerkonto.

Syntax

User.ChangePassword OldPassword, NewPassword

Parameter

OldPassword Ein String-Wert, der das bestehende Kennwort des Benutzers angibt. Wenn der Benutzer derzeit über kein Kennwort verfügt, verwenden Sie eine leere Zeichenfolge ("") für OldPassword.

NewPassword Ein String-Wert, der das neue Kennwort angibt.

Hinweise

Das alte Kennwort muss aus Sicherheitsgründen zusätzlich zu dem neuen Kennwort angegeben werden.

Ein Fehler tritt auf, wenn der Provider die Verwaltung von Sicherheitseigenschaften nicht unterstützt.


Create-Methode (ADOX)

Create-Methode

Erstellt einen neuen Katalog.

Syntax

Catalog.Create ConnectString

Parameter

ConnectString Ein String-Wert, der für die Verbindung mit der Datenquelle verwendet wird.

Hinweise

Die Create-Methode erstellt und öffnet eine neue ADO-Verbindung mit der in ConnectString angegebenen Datenquelle. Wenn dieser Vorgang erfolgreich war, wird das neue Connection-Objekt der ActiveConnection-Eigenschaft zugewiesen.

Ein Fehler tritt auf, wenn der Provider das Erstellen neuer Kataloge nicht unterstützt.


Delete-Methode (ADOX-Auflistungen)

Delete-Methode (Auflistungen)

Entfernt ein Objekt aus einer Auflistung.

Syntax

Collection.Delete Name

Parameter

Name Ein Variant-Wert, der den Namen oder die Ordinalposition (Index) des zu löschenden Objekts angibt.

Hinweise

Ein Fehler tritt auf, wenn der Name in der Auflistung nicht existiert.

Bei Tables- und Users-Auflistungen tritt ein Fehler auf, wenn der Provider das Löschen von Tabellen bzw. Benutzern nicht unterstützt. Bei Procedures- und Views-Auflistungen schlägt die Delete-Methode fehl, wenn der Provider keine beständigen Befehle unterstützt.


GetObjectOwner-Methode (ADOX)

GetObjectOwner-Methode

Gibt den Eigentümer eines Objekts in einem Catalog zurück.

Syntax

Owner = Catalog.GetObjectOwner(ObjectName, ObjectType [, ObjectTypeId])

Rückgabewert

Gibt einen String-Wert zurück, der den Namen des User-Objekts oder des Group-Objekts angibt, das Eigentümer des Objekts ist.

Parameter

ObjectName Ein String-Wert, der den Namen des Objekts angibt, für den der Eigentümer zurückgegeben werden soll.

ObjectType Ein Enum-Wert, der den Typ des Objekts angibt, für das der Eigentümer abgefragt werden soll. Die folgenden Konstanten stellen gültige Werte für ObjectType dar:

Konstante | Beschreibung
adPermObjProviderSpecific | Objekt hat einen vom Provider definierten Typ. Ein Fehler tritt auf, wenn der ObjectType adPermObjProviderSpecific ist und keine ObjectTypeId angegeben wird.
adPermObjTable | Objekt ist eine Tabelle.
adPermObjColumn | Objekt ist eine Spalte.
adPermObjDatabase | Objekt ist eine Datenbank.
adPermObjProcedure | Objekt ist eine Prozedur.
adPermObjView | Objekt ist eine Ansicht.
adPermObjSchema | Objekt ist ein Schema.
adPermObjDomain | Objekt ist eine Domäne.
adPermObjCollation | Objekt ist eine Zusammenstellung.
adPermObjSchemaRowset | Objekt ist ein Rowset eines Schemas.
adPermObjCharacterSet | Objekt ist ein Zeichensatz.
adPermObjTranslation | Objekt ist eine Übersetzung.

ObjectTypeId Optional. Ein Variant-Wert, der die GUID für einen Providerobjekttyp angibt, der nicht in der OLE DB-Angabe definiert ist. Dieser Parameter wird benötigt, wenn ObjectType auf adPermObjProviderSpecific gesetzt ist, andernfalls wird er nicht verwendet.

Hinweise

Ein Fehler tritt auf, wenn der Provider das Zurückgeben von Objekteigentümern nicht unterstützt.


GetPermissions-Methode (ADOX)

GetPermissions-Methode

Fragt die Berechtigungen einer Gruppe oder eines Benutzers für ein Objekt ab.

Syntax

ReturnValue = GroupOrUser.GetPermissions(Name, ObjectType
[, ObjectTypeId])

Rückgabewert

Gibt einen Long-Wert zurück, der eine Bit-Maske angibt, in der die Berechtigungen der Gruppe oder des Benutzers für das Objekt enthalten sind.

Parameter

Name Ein String-Wert, der den Namen des Objekts angibt, für den Berechtigungen abgefragt werden sollen.

ObjectType Ein Long-Wert, der den Typ des Objekts angibt, für das Berechtigungen abgefragt werden sollen. Die folgenden Konstanten stellen gültige Werte für ObjectType dar:

Konstante | Beschreibung
adPermObjProviderSpecific | Objekt hat einen vom Provider definierten Typ. Ein Fehler tritt auf, wenn der ObjectType adPermObjProviderSpecific ist und keine ObjectTypeId angegeben wird.
adPermObjTable | Objekt ist eine Tabelle.
adPermObjColumn | Objekt ist eine Spalte.
adPermObjDatabase | Objekt ist eine Datenbank.
adPermObjProcedure | Objekt ist eine Prozedur.
adPermObjView | Objekt ist eine Ansicht.
adPermObjSchema | Objekt ist ein Schema.
adPermObjDomain | Objekt ist eine Domäne.
adPermObjCollation | Objekt ist eine Zusammenstellung.
adPermObjSchemaRowset | Objekt ist ein Rowset eines Schemas.
adPermObjCharacterSet | Objekt ist ein Zeichensatz.
adPermObjTranslation | Objekt ist eine Übersetzung.

ObjectTypeId Optional. Ein Variant-Wert, der die GUID für einen Providerobjekttyp angibt, der nicht in der OLE DB-Angabe definiert ist. Dieser Parameter wird benötigt, wenn ObjectType auf adPermObjProviderSpecific gesetzt ist, andernfalls wird er nicht verwendet.


SetObjectOwner-Methode (ADOX)

SetObjectOwner-Methode

Gibt den Eigentümer eines Objekts in einem Catalog-Objekt an.

Syntax

Catalog.SetObjectOwner ObjectName, ObjectType , OwnerName [, ObjectTypeId]

Parameter

ObjectName Ein String-Wert, der den Namen des Objekts angibt, für den der Eigentümer angegeben werden soll.

ObjectType Ein Enum-Wert, der den Typ des Objekts angibt, für das der Eigentümer angegeben werden soll. Die folgenden Konstanten stellen gültige Werte für ObjectType dar:

Konstante | Beschreibung
adPermObjProviderSpecific | Objekt hat einen vom Provider definierten Typ. Ein Fehler tritt auf, wenn der ObjectType adPermObjProviderSpecific ist und keine ObjectTypeId angegeben wird.
adPermObjTable | Objekt ist eine Tabelle.
adPermObjColumn | Objekt ist eine Spalte.
adPermObjDatabase | Objekt ist eine Datenbank.
adPermObjProcedure | Objekt ist eine Prozedur.
adPermObjView | Objekt ist eine Ansicht.
adPermObjSchema | Objekt ist ein Schema.
adPermObjDomain | Objekt ist eine Domäne.
adPermObjCollation | Objekt ist eine Zusammenstellung.
adPermObjSchemaRowset | Objekt ist ein Rowset eines Schemas.
adPermObjCharacterSet | Objekt ist ein Zeichensatz.
adPermObjTranslation | Objekt ist eine Übersetzung.

OwnerName Ein String-Wert, der den Namen des User-Objekts oder des Group-Objekts angibt, das Eigentümer des Objekts ist.

ObjectTypeId Optional. Ein Variant-Wert, der die GUID für einen Providerobjekttyp angibt, der nicht in der OLE DB-Angabe definiert ist. Dieser Parameter wird benötigt, wenn ObjectType auf adPermObjProviderSpecific gesetzt ist, andernfalls wird er nicht verwendet.

Hinweise

Ein Fehler tritt auf, wenn der Provider das Angeben von Objekteigentümern nicht unterstützt.


SetPermissions-Methode (ADOX)

SetPermissions-Methode

Legt die Berechtigungen einer Gruppe oder eines Benutzers für ein Objekt fest.

Syntax

GroupOrUser.SetPermissions Name, ObjectType, Action, Rights [, Inherit]
[, ObjectTypeId]

Parameter

Name Ein String-Wert, der den Namen des Objekts angibt, für den Berechtigungen abgefragt werden sollen.

ObjectType Ein Long-Wert, der den Typ des Objekts angibt, für das Berechtigungen abgefragt werden sollen. Die folgenden Konstanten stellen gültige Werte für ObjectType dar:

Konstante | Beschreibung
adPermObjProviderSpecific | Objekt hat einen vom Provider definierten Typ. Ein Fehler tritt auf, wenn der ObjectType adPermObjProviderSpecific ist und keine ObjectTypeId angegeben wird.
adPermObjTable | Objekt ist eine Tabelle.
adPermObjColumn | Objekt ist eine Spalte.
adPermObjDatabase | Objekt ist eine Datenbank.
adPermObjProcedure | Objekt ist eine Prozedur.
adPermObjView | Objekt ist eine Ansicht.
adPermObjSchema | Objekt ist ein Schema.
adPermObjDomain | Objekt ist eine Domäne.
adPermObjCollation | Objekt ist eine Zusammenstellung.
adPermObjSchemaRowset | Objekt ist ein Rowset eines Schemas.
adPermObjCharacterSet | Objekt ist ein Zeichensatz.
adPermObjTranslation | Objekt ist eine Übersetzung.

Action Ein Long-Wert, der angibt, welcher Aktivitätstyp beim Festlegen von Berechtigungen durchgeführt werden soll. Die folgenden Konstanten stellen gültige Werte für Action dar:

Konstante | Beschreibung
adAccessGrant | Die Gruppe oder der Benutzer erhält mindestens die angeforderten Berechtigungen.
adAccessSet | Die Gruppe oder der Benutzer erhält genau die angeforderten Berechtigungen.
adAccessDeny | Der Gruppe oder dem Benutzer werden die angegebenen Berechtigungen verweigert.
adAccessRevoke | Alle der Gruppe oder dem Benutzer ausdrücklich gewährten Zugriffsrechte werden widerrufen.
adAccessAuditSuccess | Die Gruppe wird überprüft, wenn das Objekt, das die angeforderten Berechtigungen verwendet, erfolgreich geöffnet wird.
adAccessAuditFailure | Die Gruppe wird überprüft, wenn das Öffnen des Objekt, das die angeforderten Berechtigungen verwendet, fehlschlägt.

Rights Ein Long-Wert, der eine Bit-Maske enthält, die die festzulegenden Rechte angibt. Die Werte können kombiniert werden. Die folgenden Konstanten stellen gültige Werte für Rights dar:

Konstante | Beschreibung
adRightExecute | Die Gruppe hat die Berechtigung, das Objekt auszuführen.
adRightRead | Die Gruppe hat die Berechtigung, das Objekt zu lesen.
adRightUpdate | Die Gruppe hat die Berechtigung, das Objekt zu aktualisieren.
adRightInsert | Die Gruppe hat die Berechtigung, das Objekt einzufügen.
adRightDelete | Die Gruppe hat die Berechtigung, das Objekt zu löschen.
adRightReference | Die Gruppe hat die Berechtigung, auf das Objekt zu verweisen.
adRightCreate | Die Gruppe hat die Berechtigung, das Objekt zu erstellen.
adRightWithGrant | Die Gruppe hat die Berechtigung, Berechtigungen für das Objekt zu erteilen.
adRightDesign | Die Gruppe hat die Berechtigung, das Objekt zu entwerfen.
adRightAll | Die Gruppe hat alle Berechtigungen für das Objekt.

Inherit Optional. Ein Enum-Wert, der angibt, wie diese Berechtigungen an Objekte vererbt werden. Der Standardwert ist adInheritNone. Die folgenden Konstanten stellen gültige Werte für Inherit dar:

Konstante | Beschreibung
adInheritNone | Keine Vererbung.
adInheritObjects | Nicht-Container-Objekte im Container erben die Berechtigungen.
adInheritContainers | Andere Container, die im primären Objekt enthalten sind, erben den Eintrag.
adInheritBoth | Sowohl Objekte als auch andere Container, die im primären Objekt enthalten sind, erben den Eintrag.
adInheritNoPropagate | Die adInheritObjects- und adInheritContainers-Attribute werden nicht an einen geerbten Eintrag weitergegeben.
adInheritOnly | Berechtigungen betreffen nicht das primäre Objekt, an das die Zugriffskontrollliste (Access Control List, ACL) angehängt ist, aber Objekte, die im primären Objekt enthalten sind, erben den Eintrag.

ObjectTypeId Optional. Ein Variant-Wert, der die GUID für einen Providerobjekttyp angibt, der nicht in der OLE DB-Angabe definiert ist. Dieser Parameter wird benötigt, wenn ObjectType auf adPermObjProviderSpecific gesetzt ist, andernfalls wird er nicht verwendet.

Hinweise

Ein Fehler tritt auf, wenn der Provider das Festlegen von Zugriffsrechten für Gruppen oder Benutzer nicht unterstützt.


ADOX-Eigenschaften

ADOX-Eigenschaft - Zusammenfassung

Eigenschaft | Beschreibung
ActiveConnection | Gibt das ADO Connection-Objekt an, zu dem der Katalog gehört.
Attributes | Beschreibt die Spaltenmerkmale.
Clustered | Gibt an, ob der Index gruppiert ist.
Command | Gibt ein ADO Command-Objekt an, das zum Erstellen oder Ausführen der Prozedur verwendet werden kann.
Count | Gibt die Anzahl der Objekte in einer Auflistung an.
DateCreated | Gibt das Datum an, zu dem das Objekt erstellt wurde.
DateModified | Gibt das Datum an, zu dem das Objekt zuletzt geändert wurde.
DefinedSize | Gibt die festgelegte maximale Größe der Spalte an.
DeleteRule | Gibt die Aktion an, die beim Löschen eines Primärschlüssels ausgeführt wird.
IndexNulls | Gibt an, ob Datensätze mit Null-Werten in den Indexfeldern Indexeinträge aufweisen.
Name | Gibt den Namen des Objekts an.
NumericScale | Gibt die Skalierung der numerischen Werte in der Spalte an.
ParentCatalog | Gibt den übergeordneten Katalog einer Tabelle oder Spalte an, um providerspezifischen Eigenschaften einen Zugriff bereitzustellen.
Precision | Gibt die maximale Genauigkeit von Datenwerten in Spalten an.
PrimaryKey | Gibt an, ob der Index den Primärschlüssel auf der Tabelle darstellt.
RelatedColumn | Gibt den Namen der zugehörigen Spalte in der verbundenen Tabelle an (nur Schlüsselspalten).
RelatedTable | Gibt den Namen der verbundenen Tabelle an.
SortOrder | Gibt die Sortierreihenfolge für die Spalte an (nur Indexspalten).
Type (Spalte) | Gibt den Datentyp einer Spalte an.
Type (Schlüssel) | Gibt den Datentyp eines Schlüssels an.
Type (Tabelle) | Gibt den Tabellentyp an.
Unique | Gibt an, ob die Indexschlüssel eindeutig sein müssen.
UpdateRule | Gibt die Aktion an, die beim Aktualisieren eines Primärschlüssels ausgeführt wird.


ActiveConnection-Eigenschaft (ADOX)

ActiveConnection-Eigenschaft

Gibt das ADO Connection-Objekt an, zu dem der Katalog gehört.

Einstellungen und Rückgabewerte

Legt ein Connection-Objekt oder einen Wert vom Typ String fest, der die Definition für eine Verbindung enthält. Gibt das aktive Connection-Objekt zurück.

Hinweise

Der Standardwert ist ein Null-Objektverweis.


Attributes-Eigenschaft (ADOX)

Attributes-Eigenschaft

Beschreibt die Spaltenmerkmale.

Einstellungen und Rückgabewerte

Legt einen Long-Wert fest oder gibt diesen zurück. Der Wert gibt die Merkmale der Tabelle an, die vom Column-Objekt dargestellt werden. Dabei kann es sich um eine Kombination der folgenden Konstanten handeln:

Konstante | Beschreibung
adColFixed | Die Spalte hat eine feste Länge.
adColNullable | Die Spalte kann Null-Werte enthalten.

Hinweise

Der Standardwert ist null (0); dies ist weder adColFixed noch adColNullable.


Clustered-Eigenschaft (ADOX)

Clustered-Eigenschaft

Gibt an, ob der Index gruppiert ist.

Einstellungen und Rückgabewerte

Legt einen booleschen Wert fest und gibt diesen zurück.

Hinweise

Der Standardwert ist False.

Diese Eigenschaft ist bei Index-Objekten, die bereits an eine Auflistung angehängt wurden, schreibgeschützt.


Command-Eigenschaft (ADOX)

Command-Eigenschaft

Gibt ein ADO Command-Objekt an, das zum Erstellen oder Ausführen der Prozedur verwendet werden kann.

Einstellungen und Rückgabewerte

Legt ein gültiges ADO Command-Objekt fest oder gibt dieses zurück.

Hinweise

Unterstützt der Provider keine beständigen Befehle, tritt beim Übertragen bzw. Festlegen dieser Eigenschaft ein Fehler auf.


DateCreated-Eigenschaft (ADOX)

DateCreated-Eigenschaft

Gibt das Datum an, zu dem das Objekt erstellt wurde.

Rückgabewerte

Gibt einen Variant-Wert zurück, der das Erstellungsdatum angibt. Der Wert ist Null, wenn der Provider DateCreated nicht unterstützt.


DateModified-Eigenschaft (ADOX)

DateModified-Eigenschaft

Gibt das Datum an, zu dem das Objekt zuletzt geändert wurde.

Rückgabewerte

Gibt einen Variant-Wert zurück, der das Änderungsdatum angibt. Der Wert ist Null, wenn der Provider DateModified nicht unterstützt.


DefinedSize-Eigenschaft (ADOX)

DefinedSize-Eigenschaft

Gibt die festgelegte maximale Größe der Spalte an.

Einstellungen und Rückgabewerte

Legt einen Long-Wert fest, der der maximalen Zeichenlänge von Datenwerten entspricht, oder gibt diesen zurück.

Hinweise

Der Standardwert ist null (0).

Diese Eigenschaft ist bei Column-Objekten, die bereits an eine Auflistung angehängt wurden, schreibgeschützt.


DeleteRule-Eigenschaft (ADOX)

DeleteRule-Eigenschaft

Gibt die Aktion an, die beim Löschen eines Primärschlüssels ausgeführt wird.

Einstellungen und Rückgabewerte

Legt einen Long-Wert fest und gibt diesen zurück. Hierbei handelt es sich um eine der folgenden Konstanten:

Konstante | Beschreibung
adRINone | Keine Aktion.
adRICascade | Ändert die Kaskadierung.
adRISetNull | Setzt den unbekannten Schlüsselwert auf null.
adRISetDefault | Setzt den unbekannten Schlüsselwert auf den Standardwert.

Hinweise

Der Standardwert ist adRINone.

Diese Eigenschaft ist bei Key-Objekten, die bereits an eine Auflistung angehängt wurden, schreibgeschützt.


IndexNulls-Eigenschaft (ADOX)

IndexNulls-Eigenschaft

Gibt an, ob Datensätze mit Null-Werten in den Indexfeldern Indexeinträge aufweisen.

Einstellungen und Rückgabewerte

Legt einen Enum-Wert fest und gibt diesen zurück. Hierbei handelt es sich um eine der folgenden Konstanten:

Konstante | Beschreibung
adIndexNullsDisallow | Der Index sieht keine Einträge vor, bei denen die Schlüsselspalten Null sind. Wird ein Null-Wert in eine Schlüsselspalte eingegeben, tritt ein Fehler auf.
adIndexNullsIgnore | Der Index fügt keine Einträge mit Null-Schlüsseln ein. Wird ein Null-Wert in eine Schlüsselspalte eingegeben, wird der Eintrag ignoriert, und es tritt kein Fehler auf.
adIndexNullsIgnoreAny | Der Index fügt keine Einträge ein, bei denen einige Schlüsselspalten Null-Werte aufweisen. Wird bei einem Index mit einem mehrspaltigen Schlüssel ein Null-Wert in einigen Spalten eingegeben, wird der Eintrag ignoriert, und es tritt kein Fehler auf.

Hinweise

Der Standardwert ist adIndexNullsDisallow.

Diese Eigenschaft ist bei Index-Objekten, die bereits an eine Auflistung angehängt wurden, schreibgeschützt.


Name-Eigenschaft (ADOX)

Name-Eigenschaft

Gibt den Namen des Objekts an.

Einstellungen und Rückgabewerte

Legt einen String-Wert fest oder gibt diesen zurück.

Hinweise

Namen können innerhalb einer Auflistung mehrmals verwendet werden.

Die Name-Eigenschaft bietet Schreib-/Lesezugriff bei Column-, Group-, Key-, Index-, Table- und User-Objekten. Die Name-Eigenschaft ist bei Catalog-, Procedure- und View-Objekten schreibgeschützt.

Bei Objekten mit Schreib-/Lesezugriff (Column, Group, Key, Index, Table und User) ist der Standardwert eine leere Zeichenfolge ("").

Anmerkungen

  • Für Schlüssel ist diese Eigenschaft bei Key-Objekten, die bereits an eine Auflistung angehängt wurden, schreibgeschützt.

  • Für Tabellen ist diese Eigenschaft bei Table-Objekten, die bereits an eine Auflistung angehängt wurden, schreibgeschützt.


NumericScale-Eigenschaft (ADOX)

NumericScale-Eigenschaft

Gibt die Skalierung der numerischen Werte in der Spalte an.

Einstellungen und Rückgabewerte

Legt einen Byte-Wert fest und gibt diesen zurück. Hierbei kann es sich um die Skalierung von Datenwerten in der Spalte handeln, wenn als Type-Eigenschaft adNumeric oder adDecimal festgelegt ist. NumericScale wird für alle anderen Datentypen ignoriert.

Hinweise

Der Standardwert ist null (0).

NumericScale ist bei Column-Objekten, die bereits an eine Auflistung angehängt wurden, schreibgeschützt.


ParentCatalog-Eigenschaft (ADOX)

ParentCatalog-Eigenschaft

Gibt den übergeordneten Katalog einer Tabelle oder Spalte an, um providerspezifischen Eigenschaften einen Zugriff bereitzustellen.

Einstellungen und Rückgabewerte

Legt ein Catalog-Objekt fest und gibt dieses zurück. Das Festlegen von ParentCatalog für ein geöffnetes Catalog-Objekt ermöglicht den Zugriff auf providerspezifische Eigenschaften, bevor eine Tabelle oder Spalte einer Catalog-Auflistung angehängt wird.

Hinweise

Einige Datenprovider erlauben das Schreiben von providerspezifischen Eigenschaftswerten nur bei der Erstellung (wenn eine Tabelle oder Spalte der zugehörigen Catalog-Auflistung angehängt wird). Geben Sie zunächst den Catalog in den ParentCatalog-Eigenschaften an, um auf diese Eigenschaften zugreifen zu können, bevor Sie diese Objekte einem Catalog hinzufügen.

Wird die Tabelle oder Spalte einem anderen Catalog als dem ParentCatalog hinzugefügt, tritt ein Fehler auf.


Precision-Eigenschaft (ADOX)

Precision-Eigenschaft

Gibt die maximale Genauigkeit von Datenwerten in Spalten an.

Einstellungen und Rückgabewerte

Legt einen Long-Wert fest und gibt diesen zurück. Hierbei handelt es sich um die maximale Genauigkeit von Datenwerten in Spalten, wenn die Type-Eigenschaft einen numerischen Typ aufweist. Precision wird für alle anderen Datentypen ignoriert.

Hinweise

Der Standardwert ist null (0).

Diese Eigenschaft ist bei Column-Objekten, die bereits an eine Auflistung angehängt wurden, schreibgeschützt.


PrimaryKey-Eigenschaft (ADOX)

PrimaryKey-Eigenschaft

Gibt an, ob der Index den Primärschlüssel in der Tabelle darstellt.

Einstellungen und Rückgabewerte

Legt einen booleschen Wert fest und gibt diesen zurück.

Hinweise

Der Standardwert ist False.

Diese Eigenschaft ist bei Index-Objekten, die bereits an eine Auflistung angehängt wurden, schreibgeschützt.


RelatedColumn-Eigenschaft (ADOX)

RelatedColumn-Eigenschaft

Gibt den Namen der zugehörigen Spalte in der verbundenen Tabelle an (nur Schlüsselspalten).

Einstellungen und Rückgabewerte

Legt einen String-Wert fest und gibt diesen zurück. Hierbei handelt es sich um den Namen der zugehörigen Spalte in der verbundenen Tabelle.

Hinweise

Der Standardwert ist eine leere Zeichenfolge ("").

Diese Eigenschaft ist bei Column-Objekten, die bereits an eine Auflistung angehängt wurden, schreibgeschützt.


RelatedTable-Eigenschaft (ADOX)

RelatedTable-Eigenschaft

Gibt den Namen der verbundenen Tabelle an.

Einstellungen und Rückgabewerte

Legt einen String-Wert fest und gibt diesen zurück.

Hinweise

Der Standardwert ist eine leere Zeichenfolge ("").

Handelt es sich beim Schlüssel um einen unbekannten Schlüssel, ist RelatedTable der Name der Tabelle, die den Schlüssel enthält.


SortOrder-Eigenschaft (ADOX)

SortOrder-Eigenschaft

Gibt die Sortierreihenfolge für die Spalte an (nur Indexspalten).

Einstellungen und Rückgabewerte

Legt einen Long-Wert fest und gibt diesen zurück. Hierbei handelt es sich um eine der folgenden Konstanten:

Konstante | Beschreibung
adSortAscending | Die Sortierreihenfolge für die Spalte ist aufsteigend.
adSortDescending | Die Sortierreihenfolge für die Spalte ist absteigend.

Hinweise

Der Standardwert ist adSortAscending.

Diese Eigenschaft betrifft nur Column-Objekte in der Columns-Auflistung eines Indexes.


Type-Eigenschaft (Spalten) (ADOX)

Type-Eigenschaft (Spalte)

Gibt den Datentyp einer Spalte an.

Einstellungen und Rückgabewerte

Legt einen Long-Wert fest oder gibt diesen zurück. Hierbei handelt es sich um eine der folgenden Konstanten:

Konstante | Beschreibung
adTinyInt | Exakter numerischer Wert, Genauigkeit 3 Skalierung 0. Weitere Informationen über diesen Typ finden Sie in der OLE DB Programmer's Reference.
adSmallInt | Exakter numerischer Wert, Genauigkeit 5 Skalierung 0. Weitere Informationen über diesen Typ finden Sie in der OLE DB Programmer's Reference.
adInteger | Exakter numerischer Wert, Genauigkeit 10 Skalierung 0. Weitere Informationen über diesen Typ finden Sie in der OLE DB Programmer's Reference.
adBigInt | Exakter numerischer Wert, Genauigkeit 19 Skalierung 0. Weitere Informationen über diesen Typ finden Sie in der OLE DB Programmer's Reference.
adUnsignedTinyInt | adTinyInt-Version ohne Vorzeichen.
adUnsignedSmallInt | adSmallInt-Version ohne Vorzeichen.
adUnsignedInt | adInteger-Version ohne Vorzeichen.
adUnsignedBigInt | adBigInt-Version ohne Vorzeichen.
adSingle | Gleitkommazahl mit einzelner Genauigkeit.
adDouble | Gleitkommazahl mit doppelter Genauigkeit.
adCurrency | Währungstyp. Weitere Informationen über diesen Typ finden Sie in der OLE DB Programmer's Reference.
adDecimal | Dezimaler Variant-Typ. Weitere Informationen über diesen Typ finden Sie in der OLE DB Programmer's Reference.
adNumeric | Numerischer Typ. Weitere Informationen über diesen Typ finden Sie in der OLE DB Programmer's Reference.
adBoolean | Boolescher Variant-Typ. 0 ist false und ~0 ist true.
adUserDefined | Benutzerdefinierter Datentyp mit variabler Länge. Weitere Informationen über diesen Typ finden Sie in der OLE DB Programmer's Reference.
adVariant | Automatisierungs-Variant-Typ. Weitere Informationen über diesen Typ finden Sie in der OLE DB Programmer's Reference.
adGUID | Globaler eindeutiger Bezeichner. Weitere Informationen über diesen Typ finden Sie in der OLE DB Programmer's Reference.
adDate | Automatisierungsdatum. Weitere Informationen über diesen Typ finden Sie in der OLE DB Programmer's Reference.
adDBDate | Datenstruktur von Datenbankdatumsangaben. Weitere Informationen über diesen Typ finden Sie in der OLE DB Programmer's Reference.
adDBTime | Datenstruktur von Datenbankzeitangaben. Weitere Informationen über diesen Typ finden Sie in der OLE DB Programmer's Reference.
adDBTimeStamp | Struktur des Datenbankzeitstempels. Weitere Informationen über diesen Typ finden Sie in der OLE DB Programmer's Reference.
adBSTR | Zeiger auf ein BSTR. Weitere Informationen über diesen Typ finden Sie in der OLE DB Programmer's Reference.
adChar | Zeichenfolge mit fester Länge.
adVarChar | Zeichenfolge mit variabler Länge.
adLongVarChar | Zeichenfolge mit Long-variabler Länge.
adWChar | Zeichenfolge mit Wide-fester Länge.
adVarWChar | Zeichenfolge mit Wide-variabler Länge.
adLongVarWChar | Zeichenfolge mit Long, Wide-variabler Länge.
adBinary | Binärdaten mit fester Länge.
adVarBinary | Binärdaten mit variabler Länge.
adLongVarBinary | Binärdaten mit Long-variabler Länge.

Hinweise

Der Standardwert ist adVarWChar.

Diese Eigenschaft bietet Schreib-/Lesezugriff, bis das Column-Objekt an eine Auflistung oder ein anderes Objekt angehängt wurde. Anschließend ist sie schreibgeschützt.


Type-Eigenschaft (Schlüssel) (ADOX)

Type-Eigenschaft (Schlüssel)

Gibt den Datentyp eines Schlüssels an.

Einstellungen und Rückgabewerte

Legt einen Long-Wert fest oder gibt diesen zurück. Hierbei handelt es sich um eine der folgenden Konstanten:

Konstante | Beschreibung
adKeyPrimary | Dieser Schlüssel ist ein Primärschlüssel.
adKeyForeign | Dieser Schlüssel ist ein unbekannter Schlüssel.
adKeyUnique | Dieser Schlüssel ist einmalig.

Hinweise

Der Standardwert ist adKeyPrimary.

Diese Eigenschaft ist bei Key-Objekten, die bereits an eine Auflistung angehängt wurden, schreibgeschützt.


Type-Eigenschaft (Tabellen) (ADOX)

Type-Eigenschaft (Tabelle)

Gibt den Tabellentyp an.

Rückgabewerte

Gibt einen String-Wert zurück, der den Tabellentyp angibt, wie beispielsweise "TABELLE", "SYSTEMTABELLE", oder "GLOBAL TEMPORÄR".

Hinweise

Diese Eigenschaft ist schreibgeschützt.


Unique-Eigenschaft (ADOX)

Unique-Eigenschaft

Gibt an, ob die Indexschlüssel eindeutig sein müssen.

Einstellungen und Rückgabewerte

Legt einen booleschen Wert fest und gibt diesen zurück.

Hinweise

Der Standardwert ist False.

Diese Eigenschaft ist bei Index-Objekten, die bereits an eine Auflistung angehängt wurden, schreibgeschützt.


UpdateRule-Eigenschaft (ADOX)

UpdateRule-Eigenschaft

Gibt die Aktion an, die beim Aktualisieren eines Primärschlüssels ausgeführt wird.

Einstellungen und Rückgabewerte

Legt einen Long-Wert fest und gibt diesen zurück. Hierbei handelt es sich um eine der folgenden Konstanten:

Konstante | Beschreibung
adRINone | Keine Aktion.
adRICascade | Ändert die Kaskadierung.
adRISetNull | Setzt den unbekannten Schlüsselwert auf null.
adRISetDefault | Setzt den unbekannten Schlüsselwert auf den Standardwert.

Hinweise

Der Standardwert ist adRINone.

Diese Eigenschaft ist bei Key-Objekten, die bereits an die Auflistung angehängt wurden, schreibgeschützt.


ADOX-Beispiele

Diese Themen enthalten Beispielcode, um Ihnen das Verständnis der Verwendung von ADOX zu erleichtern. Alle Codebeispiele wurden mit Visual Basic geschrieben. Die Beispiele sind nachfolgend nach Funktionsbereich gruppiert und nach Komplexität geordnet.

Anmerkung Fügen Sie das gesamte Codebeispiel, von Sub bis End Sub, in Ihren Codeeditor ein. Wenn Sie nur Teile der Beispiele verwenden oder die Absatzformatierung verloren geht, wird das Beispiel möglicherweise nicht ordnungsgemäß ausgeführt.

Beispiele für Datenbankverbindungen

Beispiel für Catalog ActiveConnection

Beispiel für das Schließen einer Verbindung

Beispiele für die Erstellung eines Schemas

Beispiel für das Erstellen einer Datenbank

Beispiel für das Erstellen einer Tabelle

Beispiel für das Erstellen eines Indexes

Beispiel für das Erstellen eines Schlüssels

Beispiel für providerspezifische Eigenschaften

Beispiel für ParentCatalog

Beispiele für Ansichten (Abfragen mit SELECT)

Beispiel für das Erstellen einer Ansicht

Beispiel für das Löschen einer Ansicht

Beispiel für das Anzeigen von Text

Beispiel für das Anzeigen eines Feldes

Beispiele für gespeicherte Prozeduren

Beispiel für das Erstellen einer Prozedur

Beispiel für das Löschen einer Prozedur

Beispiel für das Aktualisieren einer Prozedur

Beispiel für den Text einer Prozedur

Beispiel für den Parameter einer Prozedur

Beispiel für Benutzer- und Gruppenberechtigungen

Beispiel für das Erteilen von Berechtigungen


Beispiel für das Erteilen von Berechtigungen (ADOX)

Beispiel für das Erteilen von Berechtigungen

Mit dem folgenden Code wird der Benutzergruppe Admin voller Zugriff auf die Tabelle Bestellungen erteilt.

Sub GrantPermissions()

    Dim cnn As New ADODB.Connection
    Dim cat As New ADOX.Catalog

    ' Öffnet eine Verbindung zur Nordwind-Datenbank
    ' mit Hilfe des Jet 4.0-Providers
    cnn.Provider = "Microsoft.Jet.OLEDB.4.0"
    cnn.Open "data source=" & _
    "c:\Programme\Microsoft Office\Office\Beispiele\Nordwind.mdb;" & _
    "jet oledb:system database=mysystem.mdb"

    Set cat.ActiveConnection = cnn

    ' Gibt den Admin-Benutzern alle Rechte auf das Objekt Bestellungen
    cat.Users("Admin").SetPermissions "Orders", adPermObjTable, _
        adAccessSet, adRightAll

End Sub


Beispiel für das Erstellen einer Datenbank (ADOX)

Beispiel für das Erstellen einer Datenbank

Mit dem folgenden Code wird gezeigt, wie eine neue Jet-Datenbank mit der Create-Methode erstellt wird.

Sub CreateDatabase()

    Dim cat As New ADOX.Catalog
    cat.Create "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\new.mdb"

End Sub


Beispiel für das Erstellen eines Indexes (ADOX)

Beispiel für das Erstellen eines Indexes

Mit dem folgenden Code wird gezeigt, wie ein neuer Index erstellt wird. Beim Index handelt es sich um zwei Spalten einer Tabelle.

Sub CreateIndex()

    Dim tbl As New Table
    Dim idx As New ADOX.Index
    Dim cat As New ADOX.Catalog

'Öffnet den Katalog.
    ' Öffnet den Katalog.
    cat.ActiveConnection = _
        "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=c:\Programme\Microsoft Office\" & _
        "Office\Beispiele\Nordwind.mdb;"

    ' Definiert die Tabelle und fügt sie dem Katalog hinzu
    tbl.Name = "MyTable"
    tbl.Columns.Append "Column1", adInteger
    tbl.Columns.Append "Column2", adInteger
    tbl.Columns.Append "Column3", adVarWChar, 50
    cat.Tables.Append tbl

    ' Definiert einen mehrspaltigen Index
    idx.Name = "multicolidx"
    idx.Columns.Append "Column1"
    idx.Columns.Append "Column2"

    ' Fügt den Index der Tabelle hinzu
    tbl.Indexes.Append idx

End Sub


Beispiel für das Erstellen eines Schlüssels (ADOX)

Beispiel für das Erstellen eines Schlüssels

Mit dem folgenden Code wird gezeigt, wie ein neuer unbekannter Schlüssel erstellt wird. Dabei wird davon ausgegangen, dass zwei Tabellen (Kunden und Bestellungen) vorhanden sind.

Sub CreateKey()

    Dim kyForeign As New ADOX.Key
    Dim cat As New ADOX.Catalog

    cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=c:\Programme\Microsoft Office\" & _
        "Office\Beispiele\Nordwind.mdb;"

    kyForeign.Name = "CustOrder"
    kyForeign.Type = adKeyForeign
    kyForeign.RelatedTable = "Customers"
    kyForeign.Columns.Append "CustomerId"
    kyForeign.Columns("CustomerId").RelatedColumn = "CustomerId"
    kyForeign.UpdateRule = adRICascade
    cat.Tables("Orders").Keys.Append kyForeign

End Sub


Beispiel für das Erstellen einer Prozedur (ADOX)

Beispiel für das Erstellen einer Prozedur

Mit dem folgenden Code wird gezeigt, wie ein Command-Objekt und die Append-Methode aus der Procedures-Auflistung verwendet wird, um eine neue Prozedur in der zugrunde liegenden Datenquelle zu erstellen.

Sub CreateProcedure()

    Dim cnn As New ADODB.Connection
    Dim cmd As New ADODB.Command
    Dim prm As ADODB.Parameter
    Dim cat As New ADOX.Catalog

    ' Öffnet die Verbindung
    cnn.Open _
        "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=c:\Programme\Microsoft Office\" & _
        "Office\Beispiele\Nordwind.mdb;"

    ' Erstellt den Befehl mit den Parametern (Jet-spezifisch)
    Set cmd.ActiveConnection = cnn
    cmd.CommandText = "PARAMETERS [CustId] Text;" & _
        "Select * From Customers Where CustomerId = [CustId]"

    ' Öffnet den Katalog
    Set cat.ActiveConnection = cnn

    ' Erstellt die neue Prozedur
    cat.Procedures.Append "CustomerById", cmd

End Sub


Beispiel für das Erstellen einer Tabelle (ADOX)

Beispiel für das Erstellen einer Tabelle

Mit dem folgenden Code wird gezeigt, wie eine neue Tabelle erstellt wird.

Sub CreateTable()

    Dim tbl As New Table
    Dim cat As New ADOX.Catalog

'Öffnet den Katalog.
    ' Öffnet den Katalog.
    cat.ActiveConnection = _
        "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=c:\Programme\Microsoft Office\" & _
        "Office\Beispiele\Nordwind.mdb;"

    tbl.Name = "MyTable"
    tbl.Columns.Append "Column1", adInteger
    tbl.Columns.Append "Column2", adInteger
    tbl.Columns.Append "Column3", adVarWChar, 50
    cat.Tables.Append tbl

End Sub


Beispiel für das Erstellen einer Ansicht (ADOX)

Beispiel für das Erstellen einer Ansicht

Mit dem folgenden Code wird gezeigt, wie ein Command-Objekt und die Append-Methode aus der Views-Auflistung verwendet wird, um eine neue Ansicht in der zugrunde liegenden Datenquelle zu erstellen.

Sub CreateView()

    Dim cmd As New ADODB.Command
    Dim cat As New ADOX.Catalog

    ' Öffnet den Katalog
    cat.ActiveConnection = _
        "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=c:\Programme\Microsoft Office\" & _
        "Office\Beispiele\Nordwind.mdb;"

    ' Erstellt den Befehl, der die Ansicht darstellt.
        cmd.CommandText = "Select * From Customers"

    ' Erstellt die neue Ansicht
    cat.Views.Append "AllCustomers", cmd

End Sub


Beispiel für Catalog ActiveConnection (ADOX)

Beispiel für Catalog ActiveConnection

Durch Setzen der ActiveConnection-Eigenschaft auf eine gültige geöffnete Verbindung wird der Katalog geöffnet. Über einen geöffneten Katalog können Sie auf die im Katalog enthaltenen Schemaobjekte zugreifen.

Sub OpenConnection()

    Dim cnn As New ADODB.Connection
    Dim cat As New ADOX.Catalog

        cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source= c:\Programme\Microsoft Office\" & _
        "Office\Beispiele\Nordwind.mdb;"
    Set cat.ActiveConnection = cnn
    Debug.Print cat.Tables(0).Type

End Sub

Durch Setzen der ActiveConnection-Eigenschaft auf eine gültige Verbindungszeichenfolge wird ebenfalls der Katalog geöffnet.

Sub OpenConnectionWithString()

    Dim cat As New ADOX.Catalog

    cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=c:\Programme\Microsoft Office\" & _
        "Office\Beispiele\Nordwind.mdb;"
    Debug.Print cat.Tables(0).Type

End Sub


Beispiel für das Löschen einer Ansicht (ADOX)

Beispiel für das Löschen einer Ansicht

Mit dem folgenden Code wird gezeigt, wie die Delete-Methode verwendet wird, um eine Ansicht aus einem Katalog zu löschen.

Sub DeleteView()

    Dim cat As New ADOX.Catalog

    ' Öffnet den Katalog
    cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=c:\Programme\Microsoft Office\" & _
        "Office\Beispiele\Nordwind.mdb;"

    ' Löschen der Ansicht
    cat.Views.Delete "AllCustomers"

End Sub


Beispiel für das Schließen einer Verbindung (ADOX)

Beispiel für das Schließen einer Verbindung

Durch Setzen der ActiveConnection-Eigenschaft auf Nothing wird der Katalog geschlossen. Zugeordnete Auflistungen enthalten dann keine Daten. Objekte, die aus Schemaobjekten im Katalog erstellt wurden, sind verwaist. Sämtliche Eigenschaften dieser Objekte, die zwischengespeichert wurden, sind zwar weiterhin verfügbar; es ist jedoch nicht möglich, die Eigenschaften zu lesen, wenn hierzu der Provider aufgerufen werden muss.

Sub CloseConnectionByNothing()

    Dim cnn As New Connection
    Dim cat As New Catalog
    Dim tbl As Table

    cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source= c:\Programme\Microsoft Office\" & _
        "Office\Beispiele\Nordwind.mdb;"
    Set cat.ActiveConnection = cnn
    Set tbl = cat.Tables(0)
    Debug.Print tbl.Type    ' Cache tbl.Type info
    Set cat.ActiveConnection = Nothing
    Debug.Print tbl.Type    ' tbl ist verwaist
    ' Vorherige Zeile wird angezeigt, wenn eine
   ' Zwischenspeicherung durchgeführt wurde
    Debug.Print tbl.Columns(0).DefinedSize
    ' Vorherige Zeile wird nicht angezeigt, wenn
   ' die Informationen nicht zwischengespeichert wurden

End Sub

Das Schließen eines zum Öffnen des Katalogs verwendeten Connection-Objekts hat die gleichen Auswirkungen wie das Setzen der ActiveConnection-Eigenschaft auf Nothing.

Sub CloseConnection()

    Dim cnn As New Connection
    Dim cat As New Catalog
    Dim tbl As Table

    cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source= c:\Programme\Microsoft Office\" & _
        "Office\Beispiele\Nordwind.mdb;"
    Set cat.ActiveConnection = cnn
    Set tbl = cat.Tables(0)
    Debug.Print tbl.Type    ' Cache tbl.Type info
    cnn.Close
    Debug.Print tbl.Type    ' tbl ist verwaist
    ' Vorherige Zeile wird angezeigt, wenn eine
    ' Zwischenspeicherung durchgeführt wurde
    Debug.Print tbl.Columns(0).DefinedSize
    ' Vorherige Zeile wird nicht angezeigt, wenn
    ' die Informationen nicht zwischengespeichert wurden

End Sub


Beispiel für das Löschen einer Prozedur (ADOX)

Beispiel für das Löschen einer Prozedur

Mit dem folgenden Code wird gezeigt, wie mit Hilfe der Delete-Methode aus der Procedures-Auflistung eine Prozedur gelöscht wird.

Sub DeleteProcedure()

Dim cat As New ADOX.Catalog

    ' Öffnet den Katalog.
    cat.ActiveConnection = _
        "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=c:\Programme\Microsoft Office\" & _
        "Office\Beispiele\Nordwind.mdb;"

    ' Löscht die Prozedur.
    cat.Procedures.Delete "CustomerById"

End Sub


Beispiel für den Parameter einer Prozedur (ADOX)

Beispiel für den Parameter einer Prozedur

Mit dem folgenden Code wird gezeigt, wie die Command-Eigenschaft mit dem Command-Objekt verwendet wird, um Parameterinformationen für die Prozedur abzurufen.

Sub ProcedureParameters()

    Dim cnn As New ADODB.Connection
    Dim cmd As ADODB.Command
    Dim prm As ADODB.Parameter
    Dim cat As New ADOX.Catalog

    ' Öffnet die Verbindung
    cnn.Open _
        "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=c:\Programme\Microsoft Office\" & _
        "Office\Beispiele\Nordwind.mdb;"

    ' Öffnet den Katalog
    Set cat.ActiveConnection = cnn

    ' Lädt das command-Objekt
    Set cmd = cat.Procedures("CustomerById").Command

    ' Ruft die Parameterinformationen ab
    cmd.Parameters.Refresh
    For Each prm In cmd.Parameters
        Debug.Print prm.Name & ":" & prm.Type
    Next

End Sub


Beispiel für den Text einer Prozedur (ADOX)

Beispiel für den Text einer Prozedur

Mit dem folgenden Code wird gezeigt, wie die Command-Eigenschaft verwendet wird, um den Text einer Prozedur zu aktualisieren.

Sub ProcedureText()

    Dim cnn As New ADODB.Connection
    Dim cat As New ADOX.Catalog
    Dim cmd As New ADODB.Command

    ' Öffnet die Verbindung
    cnn.Open _
        "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=c:\Programme\Microsoft Office\" & _
        "Office\Beispiele\Nordwind.mdb;"

    ' Öffnet den Katalog
    Set cat.ActiveConnection = cnn

    ' Ruft den Befehl ab
    Set cmd = cat.Procedures("CustomerById").Command

    ' Aktualisiert CommandText
    cmd.CommandText = "Select CustomerId, CompanyName, ContactName " & _
        "From Customers " & _
        "Where CustomerId = [CustId]"

    ' Aktualisiert die Prozedur
    Set cat.Procedures("CustomerById").Command = cmd

End Sub


Beispiel für das Anzeigen eines Feldes (ADOX)

Beispiel für das Anzeigen eines Feldes

Mit dem folgenden Code wird gezeigt, wie die Command-Eigenschaft mit dem ADO Recordset-Objekt verwendet wird, um Feldinformationen für die Ansicht abzurufen.

Sub ViewFields()

    Dim cnn As New ADODB.Connection
    Dim rst As New ADODB.Recordset
    Dim fld As ADODB.Field
    Dim cat As New ADOX.Catalog

    ' Öffnet die Verbindung
    cnn.Open _
        "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=c:\Programme\Microsoft Office\" & _
        "Office\Beispiele\Nordwind.mdb;"

    ' Öffnet den Katalog
    Set cat.ActiveConnection = cnn

    ' Legt die Quelle für den Datensatz fest
    Set rst.Source = cat.Views("AllCustomers").Command

    ' Ruft die Feldinformationen ab
    rst.Fields.Refresh
    For Each fld In rst.Fields
        Debug.Print fld.Name & ":" & fld.Type
    Next

End Sub


Beispiel für das Anzeigen von Text (ADOX)

Beispiel für das Anzeigen von Text

Mit dem folgenden Code wird gezeigt, wie die Command-Eigenschaft verwendet wird, um den Text einer Ansicht zu aktualisieren.

Sub ViewText()

    Dim cnn As New ADODB.Connection
    Dim cat As New ADOX.Catalog
    Dim cmd As New ADODB.Command

    ' Öffnet die Verbindung
    cnn.Open _
        "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=c:\Programme\Microsoft Office\" & _
        "Office\Beispiele\Nordwind.mdb;"

    ' Öffnet den Katalog
    Set cat.ActiveConnection = cnn

    ' Ruft den Befehl ab
    Set cmd = cat.Views("AllCustomers").Command

    ' Aktualisiert CommandText des Befehls
    cmd.CommandText = _
        "Select CustomerId, CompanyName, ContactName From Customers"

    ' Aktualisiert die Ansicht
    Set cat.Views("AllCustomers").Command. = cmd

End Sub


Beispiel für ParentCatalog (ADOX)

Beispiel für ParentCatalog

Mit dem folgenden Code wird gezeigt, wie die ParentCatalog-Eigenschaft verwendet wird, um auf eine providerspezifische Eigenschaft zuzugreifen, bevor einem Katalog eine Tabelle hinzugefügt wird.

Sub SetAllowZeroLength()

    Dim cnn As New ADODB.Connection
    Dim cat As New ADOX.Catalog
    Dim tbl As New ADOX.Table
    Dim col As New ADOX.Column

    cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source= c:\Programme\" & _
        "Microsoft Office\Office\Beispiele\Nordwind.mdb;"
    Set cat.ActiveConnection = cnn
    tbl.Name = "MyTable"
    tbl.Columns.Append "Column1", adInteger
    Set col.ParentCatalog = cat
    col.Name = "Column2"
    col.Type = adVarWChar
    col.Properties("Jet OLEDB:Allow Zero Length") = True
    tbl.Columns.Append col
    cat.Tables.Append tbl

End Sub


Beispiel für das Aktualisieren einer Prozedur (ADOX)

Beispiel für das Aktualisieren einer Prozedur

Mit dem folgenden Code wird gezeigt, wie die Procedures-Auflistung eines Catalog aktualisiert wird.

Sub ProcedureRefresh()

    Dim cat As New ADOX.Catalog

    ' Öffnet den Katalog
    cat.ActiveConnection = _
        "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=c:\Programme\" & _
        "Microsoft Office\Office\Beispiele\Nordwind.mdb;"

    ' Aktualisiert die Procedures-Auflistung
    cat.Procedures.Refresh

End Sub


Beispiel für eine AutoIncrement-Spalte (ADOX)

Beispiel für eine AutoIncrement-Spalte

Mit dem folgenden Code wird gezeigt, wie eine AutoIncrement-Spalte in einer Jet-Datenbank erstellt wird.

Sub CreateAutoIncrColumn()

        Dim cat As New ADOX.Catalog
        Dim tbl As New ADOX.Table
        Dim col As New ADOX.Column

    ' Öffnet den Katalog
    cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=c:\Programme\Microsoft Office\" & _
        "Office\Beispiele\Nordwind.mdb;"

    With tbl
        .Name = "MyContacts"
        Set .ParentCatalog = cat
        ' Erstellt Felder und fügt sie dem neuen Tabellenobjekt hinzu.
        .Columns.Append "ContactId", adInteger
        ' Erstellt die ContactId- und die automatisch inkrementierte Spalte
        .Columns("ContactId").Properties("AutoIncrement") = True
        .Columns.Append "CustomerID", adVarWChar
        .Columns.Append "FirstName", adVarWChar
        .Columns.Append "LastName", adVarWChar
        .Columns.Append "Phone", adVarWChar, 20
        .Columns.Append "Notes", adLongVarWChar
    End With

    cat.Tables.Append tbl

    Set cat = Nothing

End Sub


Microsoft ADO MD Programmer's Reference

Microsoft® ActiveX® Data Objects (Multidimensional) (ADO MD) bietet einfachen Zugriff auf multidimensionale Daten aus Sprachen wie z.B. Microsoft® Visual Basic®, Microsoft® Visual C++® und Microsoft® Visual J++™. ADO MD erweitert Microsoft® ActiveX® Data Objects (ADO) auf für multidimensionale Daten spezifische Objekte, z.B. die CubeDef- und Cellset-Objekte. Mit ADO MD können Sie multidimensionale Schemas durchsuchen, einen Cube abfragen und die Ergebnisse abrufen.

Wie ADO verwendet ADO MD einen zugrunde liegenden OLE-DB-Provider, um Zugriff auf die Daten zu erhalten. Für eine Zusammenarbeit mit ADO MD muss es sich bei dem Provider um einen multidimensionalen Datenprovider (MDP) handeln, wie er in der OLE DB für OLAP-Spezifikationen definiert ist. MDPs zeigen Daten in multidimensionalen Ansichten an, im Gegensatz zu tabularen Datenprovidern (TDPs), die Daten in Tabellenansichten anzeigen. Weitere Informationen über die von Ihrem Provider unterstützte spezifische Syntax und spezifische Verhaltensweisen finden Sie in der Dokumentation Ihres OLAP OLE DB-Providers.

Bei diesem Dokument wird davon ausgegangen, dass Sie über gute Kenntnisse der Programmiersprache Visual Basic sowie allgemeine Kenntnisse von ADO und OLAP verfügen. Weitere Informationen finden Sie unter ADO Programmer's Reference. Weitere Informationen zu ADO MD finden Sie unter folgenden Themen:

  • Übersicht über multidimensionale Schemas und Daten

  • Arbeiten mit multidimensionalen Daten

  • Verwenden von ADO mit ADO MD

  • Programmieren mit ADO MD

  • ADO MD-Objektmodell


Übersicht über multidimensionale Schemas und Daten

Erläuterung multidimensionaler Schemas

Das zentrale Metadatenobjekt in ADO MD ist der Cube. Dieser besteht aus einer strukturierten Menge von verbundenen Dimensionen, Hierarchien, Ebenen und Mitgliedern.

Eine Dimension ist eine unabhängige Kategorie von Daten aus Ihrer multidimensionalen Datenbank, die sich aus Ihren Geschäftseinheiten herleitet. Eine Dimension enthält typischerweise Elemente, die als Abfragekriterien für die Measures der Datenbank verwendet werden sollen.

Eine Hierarchie ist ein Aggregationspfad einer Dimension. Eine Dimension kann über mehrere Granularitätsebenen verfügen, die in einer hierarchischen Beziehung zueinander stehen. Eine Hierarchie definiert, in welcher Beziehung diese Ebenen zueinander stehen.

Eine Ebene ist ein Aggregationsschritt in einer Hierarchie. Bei Dimensionen mit mehreren Informationsschichten ist jede Schicht eine Ebene.

Ein Mitglied ist ein Datenelement in einer Dimension. Typischerweise verwenden Sie Mitglieder, um eine Überschrift zu erstellen oder ein Measure der Datenbank zu beschreiben.

Cubes werden in ADO MD durch CubeDef-Objekte dargestellt. Dimensionen, Hierarchien, Ebenen und Mitglieder werden ebenfalls durch ihre entsprechenden ADO MD-Objekte dargestellt: Dimension, Hierarchy, Level und Member.

Dimensionen

Die Dimensionen eines Cube hängen von den Geschäftseinheiten und Datentypen ab, die in der Datenbank abgebildet werden sollen. Typischerweise stellt jede Dimension einen unabhängigen Eingangspunkt oder Mechanismus zum Auswählen von Daten dar.

Ein Cube mit Verkaufsdaten hat z.B. die folgenden fünf Dimensionen: Verkäufer/in, Geografie, Zeit, Produkte und Measure. Die Measure-Dimension enthält tatsächliche Verkaufsdatenwerte, während die anderen Dimensionen Wege zum Kategorisieren und Gruppieren der Verkaufsdatenwerte darstellen.

Die Geografie-Dimension besitzt die folgende Menge von Mitgliedern:

{Alle, Nordamerika, Europa, Kanada, USA, GB, Deutschland, Kanada-West,
Kanada-Ost, USA-NW, USA-SW, USA-NO, USA-SO, England, Schottland,
Wales,Irland, Deutschland-Nord, Deutschland-Süd, Ottawa, Toronto,
Vancouver, Calgary, Seattle, Boise, Los Angeles, Houston,
Shreveport, Miami, Boston, New York, London, Dover, Glasgow,
Edinburgh, Cardiff, Pembroke, Belfast, Londonderry, Berlin,
Hamburg, München, Stuttgart}

Hierarchien

Hierarchien definieren, wie die Ebenen einer Dimension zusammengefasst oder gruppiert werden können. Eine Dimension kann über mehr als eine Hierarchie verfügen. Eine natürliche Hierarchie existiert in der Geografie-Dimension:

Ebenen

In dem Beispiel der Geografie-Dimension, die in der obigen Abbildung dargelegt ist, stellt jedes Feld eine Ebene in der Hierarchie dar.

Jede Ebene verfügt über eine Mitgliedermenge, und zwar wie folgt:

  • Die Welt = {Alle}

  • Kontinente = {Nordamerika, Europa}

  • Staaten = {Kanada, USA, GB, Deutschland}

  • Regionen = {Kanada-Ost, Kanada-West, USA-NO, USA-NW, USA-SO, USA-SW, England, Irland, Schottland, Wales, Deutschland-Nord, Deutschland-Süd}

  • Städte = {Ottawa, Toronto, Vancouver, Calgary, Seattle, Boise, Los Angeles, Houston, Shreveport, Miami, Boston, New York, London, Dover, Glasgow, Edinburgh, Cardiff, Pembroke, Belfast, Londonderry, Berlin, Hamburg, München, Stuttgart}

Mitglieder

Mitglieder auf der Blattebene einer Hierarchie haben keine untergeordneten Elemente, und Mitglieder auf der Stammebene haben keine übergeordneten Elemente. Alle anderen Mitglieder haben mindestens ein über- und mindestens ein untergeordnetes Element. Ein Querschnitt eines Teils der Geografie-Dimension des Hierarchiebaums ergibt z.B. die folgenden Beziehungen:

  • {Alle} (übergeordnet für) {Europa, Nordamerika}

  • {Nordamerika} (übergeordnet für) {Kanada, USA}

  • {USA} (übergeordnet für) {USA-NO, USA-NW, USA-SO, USA-SW}

  • {USA-NW} (übergeordnet für) {Boise, Seattle}

Mitglieder können dabei mit einer oder mehreren Hierarchien pro Dimension zusammengestellt werden. Betrachten Sie beispielsweise eine Zeit-Dimension, bei der es zwei Arten gibt, die Tagesebene zur Jahresebene zusammenzufassen.

Dieses Beispiel verdeutlicht ein weiteres Merkmal: Einige Mitglieder der Wochenebene der Jahres-Wochen-Hierarchie erscheinen auf keiner Ebene der Jahres-Quartals-Hierarchie. Daher braucht eine Hierarchie nicht alle Mitglieder einer Dimension einzuschließen.


Arbeiten mit multidimensionalen Daten

Ein Cellset ist das Ergebnis einer Abfrage über multidimensionale Daten. Es besteht aus einer Auflistung von Achsen, normalerweise höchstens vier Achsen und typischerweise nur zwei oder drei. Eine Achse ist eine Auflistung von Mitgliedern aus einer oder mehreren Dimensionen, die für die Suche oder das Filtern von spezifischen Werten in einem Cube verwendet wird.

Eine Position ist ein Punkt auf einer Achse. Bei einer Achse, die aus einer einzigen Dimension besteht, handelt es sich bei diesen Positionen um eine Untermenge der Mitglieder der Dimension. Wenn eine Achse aus mehr als einer Dimension besteht, so ist jede Position eine Verbundeinheit aus n Teilen, wobei n die Anzahl der entlang dieser Achse orientierten Dimensionen ist. Jeder Bestandteil der Position ist ein Mitglied aus einer beteiligten Dimension.

Wenn z.B. die Geografie- und Produkt-Dimensionen eines Cubes, der Verkaufsdaten enthält, entlang der x-Achse eines Cellset orientiert sind, kann eine Position entlang dieser Achse die Mitglieder "USA" und "Computer" enthalten. In diesem Beispiel ist es für die Bestimmung einer Position entlang der x-Achse erforderlich, daß Mitglieder aus jeder Dimension entlang der Achse orientiert sind.

Eine Zelle ist ein Objekt, das am Schnittpunkt von Achsenkoordinaten platziert ist. Zu jeder Zelle gehören mehrere Informationen, einschließlich der Daten selbst, einer formatierten Zeichenfolge (die darstellbare Form von Zellendaten) und dem Ordinalwert der Zelle. (Jede Zelle stellt einen eindeutigen Ordinalwert im Cellset dar. Der Ordinalwert der ersten Zelle im Cellset ist null, während die ganz links stehende Zelle in der zweiten Reihe eines Cellset mit acht Spalten einen Ordinalwert von acht hätte.)

Angenommen, ein Cube hat die folgenden sechs Dimensionen (beachten Sie bitte, daß dieses Cube-Schema etwas von dem unter Übersicht über multidimensionale Schemas und Daten aufgeführten Beispiel abweicht):

  • Verkäufer/in

  • Geografie (natürliche Hierarchie) - Kontinente, Staaten, Länder usw.

  • Quartale - Quartale, Monate, Tage

  • Jahre

  • Measures - Verkäufe, ProzentÄnderung, BudgetierteVerkäufe

  • Produkte

Das folgende Cellset stellt die Verkäufe für 1991 für alle Produkte dar:

Anmerkung Die Zellenwerte in dem Beispiel können als geordnete Paare von Achsenposition-Ordinalzahlen angesehen werden, wobei die erste Ziffer die Position auf der x-Achse und die zweite Ziffer die Position auf der y-Achse darstellt.

Die Merkmale dieses Cellset lauten wie folgt:

  • Achsendimensionen: Quartale, Verkäufer/in, Geografie

  • Filterdimensionen: Measures, Jahre, Produkte

  • Zwei Achsen: SPALTE (x oder Achse 0) und ZEILE (y oder Achse 1)

  • x-Achse: zwei geschachtelte Dimensionen, Verkäufer/in und Geografie

  • y-Achse: Quartale-Dimension

Die x-Achse verfügt über zwei geschachtelte Dimensionen: Verkäufer/in und Geografie. Aus der Geografie werden vier Mitglieder ausgewählt: Seattle, Boston, USA-Süd und Japan. Zwei Mitglieder werden aus Verkäufer/in ausgewählt: Valentine und Nash. Dies ergibt insgesamt acht Positionen auf dieser Achse (8 = 4*2).

Jede Koordinate wird als eine Position mit zwei Mitgliedern dargestellt - eins aus der Verkäufer/in-Dimension und ein weiteres aus der Geografie-Dimension:

(Valentine, Seattle), (Valentine, Boston), (Valentine, USA_Nord),
(Valentine, Japan), (Nash, Seattle), (Nash, Boston), (Nash, USA_Nord),
(Nash, Japan)

Die y-Achse verfügt nur über eine Dimension, die die folgenden acht Positionen enthält:

Jan, Feb, Mar, Qrt2, Qrt3, Okt, Nov, Dez

Cellsets, Zellen, Achsen und Positionen werden in ADO MD alle durch entsprechende Objekte dargestellt: Cellset, Cell, Axis und Position.


Verwenden von ADO mit ADO MD

Bei ADO und ADO MD handelt es sich um verwandte, aber getrennte Objektmodelle. ADO stellt Objekte für die Verbindung mit Datenquellen, das Ausführen von Befehlen, das Abrufen von Tabellendaten und Schemametadaten im Tabellenformat sowie die Anzeige von Fehlerinformationen des Providers zur Verfügung. ADO MD stellt Objekte für das Abrufen von multidimensionalen Daten und die Anzeige von multidimensionalen Schemametadaten zur Verfügung.

Wenn Sie mit einem MDP arbeiten, können Sie wahlweise ADO, ADO MD oder beide mit Ihrer Anwendung verwenden. Durch einen Verweis auf beide Bibliotheken innnerhalb Ihres Projekts erhalten Sie vollständigen Zugriff auf die von Ihrem MDP zur Verfügung gestellten Funktionen.

Für Verbraucher ist es oft von Nutzen, eine flächige, tabellarische Ansicht einer multidimensionalen Datenmenge zu erhalten. Dies können Sie erreichen, indem Sie das ADO-Recordset-Objekt verwenden. Geben Sie die Quelle für Ihr Cellset-Objekt als den Source-Parameter für die Open-Methode eines Recordset-Objekts statt als Quelle eines ADO MD-Cellset-Objekts an.

Möglicherweise ist es auch von Nutzen, die Schemametadaten in einer Tabellenansicht statt als Objekthierarchie anzuzeigen. Die ADO-OpenSchema-Methode im Connection-Objekt ermöglicht es dem Benutzer, ein Recordset-Objekt zu öffnen, das Schemainformationen enthält. Der QueryType-Parameter der OpenSchema-Methode verfügt über mehrere Werte, die sich speziell auf MDPs beziehen. Diese Werte lauten wie folgt:

  • adSchemaCubes

  • adSchemaDimensions

  • adSchemaHierarchies

  • adSchemaLevels

  • adSchemaMeasures

  • adSchemaMembers

Um ADO-Enum-Werte mit ADO MD-Eigenschaften oder -Methoden zu verwenden, muss Ihr Projekt einen Verweis sowohl auf die ADO- als auch auf die ADO MD-Bibliothek enthalten. Beispielsweise können Sie die ADO-adState-Enum-Werte mit der ADO MD-State-Eigenschaft verwenden. Weitere Informationen zum Einrichten von Verweisen auf Bibliotheken finden Sie in der Dokumentation zum Entwicklungswerkzeug.

Weitere Informationen zu den ADO-Objekten und -Methoden finden Sie unter ADO Programmer's Reference.


Programmieren mit ADO MD

Richten Sie einen Verweis auf die ADO MD-Klassenbibliothek ein, um ADO MD zusammen mit dem von Ihnen verwendeten Entwicklungswerkzeug einzusetzen. Die Beschreibung der ADO MD-Bibliothek lautet "Microsoft ActiveX Data Objects (Multi-dimensional) Library". Der Dateiname der ADO MD-Bibliothek ist msadomd.dll und die Programm-ID (ProgID) "ADOMD". Weitere Informationen zum Einrichten von Verweisen auf Bibliotheken finden Sie in der Dokumentation zum Entwicklungswerkzeug.


ADO MD API-Verzeichnis

Dieser Abschnitt der ADO MD-Dokumentation enthält Themen für alle ADO MD-Objekte, -Auflistungen, -Methoden und -Eigenschaften sowie gegebenenfalls Beispielcode. Weitere Informationen finden Sie im Index unter dem entsprechenden Thema oder den folgenden Themen:

  • ADO MD-Objekte

  • ADO MD-Auflistungen

  • ADO MD-Methoden

  • ADO MD-Eigenschaften

  • ADO MD-Beispiele


ADO MD-Objektmodell

Das folgende Diagramm zeigt, wie diese Objekte in ADO MD dargestellt werden und in welcher Beziehung sie zueinander stehen.

Das Axis- und das Cell-Objekt verfügen jeweils über eine Positions-Auflistung.

Das Level- und das Position-Objekt verfügen jeweils über eine Members-Auflistung.

Das Axis-, Cell-, Cellset-, CubeDef-, Dimension-, Hierarchy-, Level- sowie das Member-Objekt verfügen jeweils über eine standardmäßige ADO Properties-Auflistung.


ADO MD-Objekte

ADO MD-Objekte - Zusammenfassung

Objekt | Beschreibung
Axis | Stellt eine Positions- oder Filterachse eines Zellensatzes dar, der ausgewählte Elemente einer oder mehrerer Dimensionen enthält.
Catalog | Enthält für einen mehrdimensionalen Datenprovider (MDP) spezifische mehrdimensionale Schemainformationen (d.h. Cubes und zugrunde liegende Dimensionen, Hierarchien, Ebenen und Elemente).
Cell | Stellt die Daten am Nullpunkt der Achsenkoordinaten dar, die in einem Zellensatz enthalten sind.
Cellset | Stellt das Ergebnis einer mehrdimensionalen Abfrage dar. Es handelt sich hierbei um eine Auflistungen von Zellen, die aus Cubes oder anderen Zellensätzen ausgewählt wurden.
CubeDef | Stellt einen Cube aus einem mehrdimensionalen Schema dar, das einen Satz verbundener Dimensionen enthält.
Dimension | Stellt eine der Dimensionen eines mehrdimensionalen Cubes dar, der eine oder mehrere Elementhierarchien enthält.
Hierarchy | Stellt eine Möglichkeit dar, um Elemente einer Dimension zusammenzufassen oder zu gruppieren. Eine Dimension kann dabei mit einer oder mehreren Hierarchien zusammengefasst werden.
Level | Enthält eine Menge von Elementen, die alle jeweils den gleichen Rang in einer Hierarchie aufweisen.
Member | Stellt ein Ebenenelement eines Cube, die untergeordneten Elemente eines Ebenenelements oder ein Positionselement entlang der Achse eines Zellensatzes dar.
Position | Stellt eine Gruppe einzelner oder mehrerer Elemente verschiedener Dimensionen dar, die einen Punkt entlang der Achse definieren.

Darüber hinaus ist das Catalog-Objekt mit einem ADO Connection-Objekt verbunden, das in der standardmäßigen ADO-Bibliothek enthalten ist:

Objekt | Beschreibung
Connection | Ein Connection-Objekt stellt eine geöffnete Verbindung zu einer Datenquelle dar.

Die Beziehungen zwischen diesen Objekten ist im ADO MD-Objektmodell dargestellt.

Zahlreiche ADO MD-Objekte können in einer zugehörigen Auflistung enthalten sein. Beispielsweise kann ein CubeDef-Objekt in einer CubeDefs-Auflistung eines Catalog enthalten sein. Weitere Informationen hierzu finden Sie unter ADO MD-Auflistungen.


Axis-Objekt (ADO MD)

Axis-Objekt

Stellt eine Positions- oder Filterachse eines Zellensatzes dar, der ausgewählte Elemente einer oder mehrerer Dimensionen enthält.

Hinweise

Ein Axis-Objekt kann in einer Axes-Auflistung enthalten sein oder von einer FilterAxis-Eigenschaft eines Cellset-Objekts zurückgegeben werden.

Mit den Auflistungen und Eigenschaften eines Axis-Objekts können Sie folgende Verfahren ausführen:

  • Axis mit der Name-Eigenschaft benennen.

  • Eine Iteration der einzelnen Positionen entlang von Axis mit Hilfe der Positions-Auflistung durchführen.

  • Die Anzahl der Dimensionen auf Axis mit Hilfe der DimensionCount-Eigenschaft anfordern.

  • Providerspezifische Attribute von Axis mit Hilfe der standardmäßigen ADO Properties-Auflistung anfordern.


Catalog-Objekt (ADO MD)

Catalog-Objekt

Enthält für einen mehrdimensionalen Datenprovider (MDP) spezifische mehrdimensionale Schemainformationen (d.h. Cubes und zugrunde liegende Dimensionen, Hierarchien, Ebenen und Elemente).

Hinweise

Mit den Auflistungen und Eigenschaften eines Catalog-Objekts können Sie folgende Verfahren ausführen:

  • Den Katalog öffnen, indem Sie die ActiveConnection-Eigenschaft auf ein standardmäßiges ADO Connection-Objekt oder eine gültige Verbindungszeichenfolge setzen.

  • Catalog mit der Name-Eigenschaft benennen.

  • Eine Iteration der einzelnen Cubes in einem Katalog mit Hilfe der CubeDefs-Auflistung ausführen.


Cell-Objekt (ADO MD)

Cell-Objekt

Stellt die Daten am Nullpunkt der Achsenkoordinaten dar, die in einem Zellensatz enthalten sind.

Hinweise

Ein Cell-Objekt wird von der Item-Methode eines Cellset-Objekts zurückgegeben.

Mit den Auflistungen und Eigenschaften eines Cell-Objekts können Sie folgende Verfahren ausführen:

  • Zurückgeben der Cell-Daten mit Hilfe der Value-Eigenschaft.

  • Zurückgeben der die formatierte Anzeige der Value-Eigenschaft darstellenden Zeichenfolge mit Hilfe der FormattedValue-Eigenschaft.

  • Zurückgeben des Cell-Ordinalwerts innerhalb von Cellset mit Hilfe der Ordinal-Eigenschaft.

  • Festlegen der Cell-Position eines CubeDef-Objekts mit Hilfe der Positions-Auflistung.

  • Abrufen weiterer Cell-Informationen mit Hilfe der standardmäßigen ADO Properties-Auflistung.

Die Properties-Auflistung enthält vom Provider zur Verfügung gestellte Eigenschaften. In der folgenden Tabelle sind möglicherweise zur Verfügung stehende Eigenschaften aufgeführt. Je nach Implementierung des Providers kann die tatsächliche Eigenschaftenliste von der hier angegebenen abweichen. Eine umfangreichere Liste der verfügbaren Eigenschaften finden Sie in der Dokumentation Ihres Providers.

Name | Beschreibung
BackColor | Bei der Zellendarstellung verwendete Hintergrundfarbe.
FontFlags | Spezielle Schriftarteffekte mit Hilfe einer Bit-Maske.
FontName | Beim Darstellen des Zellenwertes verwendete Schriftart.
FontSize | Beim Darstellen des Zellenwertes verwendete Schriftgröße.
ForeColor | Bei der Zellendarstellung verwendete Vordergrundfarbe.
FormatString | Wert in einer formatierten Zeichenfolge.


Cellset-Objekt (ADO MD)

Cellset-Objekt

Stellt das Ergebnis einer mehrdimensionalen Abfrage dar. Es handelt sich hierbei um eine Auflistungen von Zellen, die aus Cubes oder anderen Zellensätzen ausgewählt wurden.

Hinweise

Daten in einem Cellset werden über einen direkten, datenfeldähnlichen Zugriff abgerufen. Sie können zu einem bestimmten Element "wechseln", um Daten zu diesem Element anzufordern. Beispielsweise gibt der folgende Code die Überschrift des ersten Elements an der ersten Position auf der ersten Achse des Zellensatzes "cst" zurück:

cst.Axes(0).Positions(0).Members(0).Caption

Dabei ist kein Konzept der aktuellen Zelle innerhalb des Zellensatzes vorhanden. Vielmehr ruft die Item-Methode ein bestimmtes Cell-Objekt aus einem Zellensatz ab. Die Argumente der Item-Methode legen fest, welche Zelle abgerufen wird. Sie können jedoch auch den eindeutigen Ordinalwert einer Zelle angeben. Darüber hinaus können Sie Zellen abrufen, indem Sie deren Positionsnummern entlang der Achsen des Zellensatzes verwenden. Weitere Informationen zum Abrufen von Zellen finden Sie unter der Item-Methode.

Mit den Auflistungen, Methoden und Eigenschaften eines Cellset-Objekts können Sie folgende Verfahren ausführen:

  • Zuordnen einer geöffneten Verbindung zu einem Cellset-Objekt durch Festlegen seiner ActiveConnection-Eigenschaft.

  • Ausführen und Abrufen von Ergebnissen mehrdimensionaler Abfragen mit Hilfe der Open-Methode.

  • Abrufen eines Cell-Objekts von einem Cellset mit Hilfe der Item-Methode.

  • Zurückgeben der Axis-Objekte, die das Cellset mit der Axes-Auflistung festlegen.

  • Abrufen von Informationen zu den Dimensionen, die als Filter für Cellset-Daten mit der FilterAxis-Eigenschaft verwendet werden.

  • Zurück- oder Angeben der Abfrage, die zum Festlegen des Cellset mit der Source-Eigenschaft verwendet wird.

  • Zurückgeben des aktuellen Cellset-Status (geöffnet, geschlossen, ausgeführt oder verbunden) mit Hilfe der State-Eigenschaft.

  • Schließen eines geöffneten Cellset mit der Close-Methode.

  • Abrufen providerspezifischer Cellset-Informationen mit Hilfe der standardmäßigen ADO Properties-Auflistung.


CubeDef-Objekt (ADO MD)

CubeDef-Objekt

Stellt einen Cube aus einem mehrdimensionalen Schema dar, das eine Menge verbundener Dimensionen enthält.

Hinweise

Mit den Auflistungen und Eigenschaften eines CubeDef-Objekts können Sie folgende Verfahren ausführen:

  • CubeDef mit der Name-Eigenschaft benennen.

  • Zurückgeben einer Zeichenfolge, die den Cube mit der Description-Eigenschaft beschreibt.

  • Zurückgeben der Dimensionen, aus denen der Cube besteht, mit Hilfe der Dimensions-Auflistung.

  • Abrufen weiterer CubeDef-Informationen mit Hilfe der standardmäßigen ADO Properties-Auflistung.

Die Properties-Auflistung enthält vom Provider zur Verfügung gestellte Eigenschaften. In der folgenden Tabelle sind möglicherweise zur Verfügung stehende Eigenschaften aufgeführt. Je nach Implementierung des Providers kann die tatsächliche Eigenschaftenliste von der hier angegebenen abweichen. Eine umfangreichere Liste der verfügbaren Eigenschaften finden Sie in der Dokumentation Ihres Providers.

Name | Beschreibung
CatalogName | Der Katalogname, zu dem dieser Cube gehört.
CreatedOn | Datum und Uhrzeit der Cube-Erstellung.
CubeGUID | Cube-GUID.
CubeName | Der Name des Cubes.
CubeType | Der Typ des Cubes.
DataUpdatedBy | Die ID des Benutzers, der die letzte Datenaktualisierung durchgeführt hat.
Description | Eine sinnvolle Beschreibung des Cubes.
LastSchemaUpdate | Datum und Uhrzeit der letzten Schemaaktualisierung.
SchemaName | Der Schemaname, zu dem dieser Cube gehört.
SchemaUpdatedBy | Die ID des Benutzers, der die letzte Schemaaktualisierung durchgeführt hat.


Dimension-Objekt (ADO MD)

Dimension-Objekt

Stellt eine der Dimensionen eines mehrdimensionalen Cubes dar, der eine oder mehrere Elementhierarchien enthält.

Hinweise

Mit den Auflistungen und Eigenschaften eines Dimension-Objekts können Sie folgende Verfahren ausführen:

  • Dimension mit der Name- und der UniqueName-Eigenschaft benennen.

  • Zurückgeben einer sinnvollen Zeichenfolge, die Dimension mit der Description-Eigenschaft beschreibt.

  • Zurückgeben des Hierarchy-Objekts, aus dem die Dimension besteht, mit Hilfe der Hierarchies-Auflistung.

  • Verwendung der standardmäßigen ADO Properties-Auflistung, um zusätzlichen Informationen zum Dimension-Objekt anzufordern.

Die Properties-Auflistung enthält vom Provider zur Verfügung gestellte Eigenschaften. In der folgenden Tabelle sind möglicherweise zur Verfügung stehende Eigenschaften aufgeführt. Je nach Implementierung des Providers kann die tatsächliche Eigenschaftenliste von der hier angegebenen abweichen. Eine umfangreichere Liste der verfügbaren Eigenschaften finden Sie in der Dokumentation Ihres Providers.

Name | Beschreibung
CatalogName | Der Katalogname, zu dem dieser Cube gehört.
CubeName | Der Name des Cubes.
DefaultHierarchy | Der eindeutige Name der Standardhierarchie.
Description | Eine sinnvolle Beschreibung des Cubes.
DimensionCaption | Eine der Dimension zugeordnete Beschriftung oder Überschrift.
DimensionCardinality | Die Anzahl der Elemente in der Dimension.
DimensionGUID | Die GUID der Dimension.
DimensionName | Der Name der Dimension.
DimensionOrdinal | Die Ordinalzahl der Dimension innerhalb der Dimensionengruppe, aus denen der Cube besteht.
DimensionType | Der Typ der Dimension.
DimensionUniqueName | Der eindeutige Name der Dimension.
SchemaName | Der Schemaname, zu dem dieser Cube gehört.


Hierarchy-Objekt (ADO MD)

Hierarchy-Objekt

Stellt eine Möglichkeit dar, um Elemente einer Dimension zusammenzufassen oder zu gruppieren. Eine Dimension kann dabei mit einer oder mehreren Hierarchien zusammengefasst werden.

Hinweise

Mit den Auflistungen und Eigenschaften eines Hierarchy-Objekts können Sie folgende Verfahren ausführen:

  • Hierarchy mit der Name- und der UniqueName-Eigenschaft benennen.

  • Zurückgeben einer sinnvollen Zeichenfolge, die Hierarchy mit der Description-Eigenschaft beschreibt.

  • Zurückgeben des Level-Objekts, aus dem die Hierarchy besteht, mit Hilfe der Levels-Auflistung.

  • Verwendung der standardmäßigen ADO Properties-Auflistung, um zusätzlichen Informationen zum Hierarchy-Objekt anzufordern.

Die Properties-Auflistung enthält vom Provider zur Verfügung gestellte Eigenschaften. In der folgenden Tabelle sind möglicherweise zur Verfügung stehende Eigenschaften aufgeführt. Je nach Implementierung des Providers kann die tatsächliche Eigenschaftenliste von der hier angegebenen abweichen. Eine umfangreichere Liste der verfügbaren Eigenschaften finden Sie in der Dokumentation Ihres Providers.

Name | Beschreibung
AllMember | Das Element auf der höchsten Zusammenfassungsebene in der Hierarchie.
CatalogName | Der Katalogname, zu dem dieser Cube gehört.
CubeName | Der Name des Cubes.
DefaultMember | Der eindeutige Name des Standardelements für diese Hierarchie.
Description | Eine sinnvolle Beschreibung der Hierarchie.
DimensionType | Der Dimensionstyp, zu dem diese Hierarchie gehört.
DimensionUniqueName | Der eindeutige Name der Dimension.
HierarchyCaption | Eine der Hierarchie zugeordnete Beschriftung oder Überschrift.
HierarchyCardinality | Die Anzahl der Elemente in der Hierarchie.
HierarchyGUID | Die GUID der Hierarchie.
HierarchyName | Der Name der Hierarchie.
HierarchyUniqueName | Der eindeutige Name der Hierarchie.
SchemaName | Der Schemaname, zu dem dieser Cube gehört.


Level-Objekt (ADO MD)

Level-Objekt

Enthält einen Satz von Elementen, die alle jeweils den gleichen Rang in einer Hierarchie aufweisen.

Hinweise

Mit den Auflistungen und Eigenschaften eines Level-Objekts können Sie folgende Verfahren ausführen:

  • Level mit der Name- und der UniqueName-Eigenschaft benennen.

  • Zurückgeben einer zu verwendenden Zeichenfolge, wenn Level mit der Caption-Eigenschaft angezeigt wird.

  • Zurückgeben einer sinnvollen Zeichenfolge, die Level mit der Description-Eigenschaft beschreibt.

  • Zurückgeben des Member-Objekts, aus dem der Level besteht, mit Hilfe der Members-Auflistung.

  • Zurückgeben der Ebenenanzahl vom Level-Ursprung mit der Depth-Eigenschaft.

  • Verwenden der standardmäßigen ADO Properties-Auflistung, um zusätzliche Informationen zum Level-Objekt anzufordern.

Die Properties-Auflistung enthält vom Provider zur Verfügung gestellte Eigenschaften. In der folgenden Tabelle sind möglicherweise zur Verfügung stehende Eigenschaften aufgeführt. Je nach Implementierung des Providers kann die tatsächliche Eigenschaftenliste von der hier angegebenen abweichen. Eine umfangreichere Liste der verfügbaren Eigenschaften finden Sie in der Dokumentation Ihres Providers.

Name | Beschreibung
CatalogName | Der Katalogname, zu dem dieser Cube gehört.
CubeName | Der Name des Cubes.
Description | Eine sinnvolle Beschreibung der Ebene.
DimensionUniqueName | Der eindeutige Name der Dimension.
HierarchyUniqueName | Der eindeutige Name der Hierarchie.
LevelCaption | Eine der Ebene zugeordnete Beschriftung oder Überschrift.
LevelCardinality | Die Anzahl der Elemente in einer Ebene.
LevelGUID | Die GUID der Ebene.
LevelName | Der Name der Ebene.
LevelNumber | Der Abstand zwischen der Ebene und dem Hierarchieursprung.
LevelType | Der Typ der Ebene.
LevelUniqueName | Der eindeutige Name der Ebene.
SchemaName | Der Schemaname, zu dem dieser Cube gehört.


Member-Objekt (ADO MD)

Member-Objekt

Stellt ein Ebenenelement eines Cube, die untergeordneten Elemente eines Ebenenelements oder ein Positionselement entlang der Achse eines Zellensatzes dar.

Hinweise

Die Member-Eigenschaften sind je nach verwendetem Kontext unterschiedlich. Ein Member eines Level in einem CubeDef verfügt über eine Children-Eigenschaft, die die Members auf der nächstniedrigeren Hierarchieebene des aktuellen Member zurückgibt. Für ein Member einer Position ist die Children-Auflistung stets leer. Darüber hinaus betrifft die Type-Eigenschaft nur Members eines Level.

Ein Member einer Position verfügt über zwei Eigenschaften - DrilledDown und ParentSameAsPrev - die sich speziell für die Cellset-Anzeige eignen Werden auf diese Eigenschaften eines Member einer Level zugegriffen, tritt ein Fehler auf.

Mit den Auflistungen und Eigenschaften eines Member-Objekts können Sie folgende Verfahren ausführen:

  • Member mit der Name- und der UniqueName-Eigenschaft benennen.

  • Zurückgeben einer zu verwendenden Zeichenfolge, wenn Member mit der Caption-Eigenschaft angezeigt wird.

  • Zurückgeben einer sinnvollen Zeichenfolge, die eine Member-Einheit oder -Formel mit der Description-Eigenschaft beschreibt.

  • Festlegen der Member-Merkmale mit der Type-Eigenschaft.

  • Anfordern von Informationen zum Level des Member mit der LevelDepth- und LevelName-Eigenschaft.

  • Anfordern verwandter Members in einer Hierarchie mit der Parent- und Children-Eigenschaft.

  • Zählen der untergeordneten Elemente eines Member mit der ChildCount-Eigenschaft.

  • Verwendung der standardmäßigen ADO Properties-Auflistung, um zusätzlichen Informationen zum Level-Objekt anzufordern.

Mit den Auflistungen und Eigenschaften eines Member-Objekts einer Position entlang einer Achse können Sie folgende Verfahren ausführen:

  • Member mit der Name- und der UniqueName-Eigenschaft benennen.

  • Zurückgeben einer zu verwendenden Zeichenfolge, wenn Member mit der Caption-Eigenschaft angezeigt wird.

  • Zurückgeben einer sinnvollen Zeichenfolge, die eine Member-Einheit oder -Formel mit der Description-Eigenschaft beschreibt.

  • Anfordern von Informationen zum Level des Member mit der LevelDepth- und LevelName-Eigenschaft.

  • Zählen der untergeordneten Elemente eines Member mit der ChildCount-Eigenschaft.

  • Verwenden der DrilledDown-Eigenschaft zum Festlegen, ob diesem Member mindestens ein untergeordnetes Element direkt auf Axis folgt.

  • Verwenden der ParentSameAsPrev-Eigenschaft, um festzulegen, ob das übergeordnete Element dieses Member dem übergeordneten Element des direkten Member-Vorgängers entspricht.

  • Verwendung der standardmäßigen ADO Properties-Auflistung, um zusätzlichen Informationen zum Level-Objekt anzufordern.

Die Properties-Auflistung enthält vom Provider zur Verfügung gestellte Eigenschaften. In der folgenden Tabelle sind möglicherweise zur Verfügung stehende Eigenschaften aufgeführt. Je nach Implementierung des Providers kann die tatsächliche Eigenschaftenliste von der hier angegebenen abweichen. Eine umfangreichere Liste der verfügbaren Eigenschaften finden Sie in der Dokumentation Ihres Providers.

Name | Beschreibung
CatalogName | Der Katalogname, zu dem dieser Cube gehört.
ChildrenCardinality | Die Anzahl der zugehörigen untergeordneten Elemente.
CubeName | Der Name des Cubes.
Description | Eine sinnvolle Beschreibung des Elements.
DimensionUniqueName | Der eindeutige Name der Dimension.
HierarchyUniqueName | Der eindeutige Name der Hierarchie.
LevelNumber | Der Abstand zwischen der Ebene und dem Hierarchieursprung.
LevelUniqueName | Der eindeutige Name der Ebene.
MemberCaption | Eine dem Element zugeordnete Beschriftung oder Überschrift.
MemberGUID | Die GUID des Elements.
MemberName | Der Name des Elements.
MemberOrdinal | Die Ordinalzahl des Elements.
MemberType | Der Typ des Elements.
MemberUniqueName | Der eindeutige Name des Elements.
ParentCount | Die Anzahl der zugehörigen übergeordneten Elemente.
ParentLevel | Die Ebenennummer des zugehörigen übergeordneten Elements.
ParentUniqueName | Der eindeutige Name des zugehörigen übergeordneten Elements.
SchemaName | Der Schemaname, zu dem dieser Cube gehört.


Position-Objekt (ADO MD)

Position-Objekt

Stellt eine Gruppe einzelner oder mehrerer Elemente verschiedener Dimensionen dar, die einen Punkt entlang der Achse festlegen.

Hinweise

Mit den Auflistungen und Eigenschaften eines Position-Objekts können Sie folgende Verfahren ausführen:

  • Verwenden der Ordinal-Eigenschaft, um die Ordinalposition der Position entlang der Achse zurückzugeben

  • Verwenden der Members-Auflistung, um die Elemente zurückzugeben, aus denen die Position entlang von Axis besteht.


ADO MD-Auflistungen

ADO MD-Auflistung - Zusammenfassung

Auflistung | Beschreibung
Axes | Enthält die Axis-Objekte, die einen Zellensatz festlegen.
CubeDefs | Enthält die CubeDef-Objekte, die einen Cube eines mehrdimensionalen Katalogs darstellen.
Dimensions | Enthält die Dimension-Objekte, aus denen ein Cube besteht.
Hierarchies | Enthält die von einer Dimension festgelegten Hierarchy-Objekte.
Levels | Enthält die Level-Objekte, aus denen eine Hierarchie besteht.
Members | Enthält die Member-Objekte einer Ebene oder Position entlang einer Achse.
Positions | Enthält die Position-Objekte, die einen Punkt auf einer Achse festlegen.


Axes-Auflistung (ADO MD)

Axes-Auflistung

Enthält die Axis-Objekte, die einen Zellensatz festlegen.

Hinweise

Ein Cellset-Objekt enthält eine Axes-Auflistung. Nachdem Cellset geöffnet wurde, enthält diese Auflistung mindestens eine Axis. Eine ausführliche Erklärung zum Verwenden von Axis-Objekten finden Sie unter Axis-Objekt.

Anmerkung Die Filterachse von Cellset ist nicht in der Axes-Auflistung enthalten. Weitere Informationen hierzu finden Sie unter FilterAxis-Eigenschaft.

Axes ist eine standardmäßige ADO-Auflistung. Mit den Eigenschaften und Methoden einer Auflistung können Sie folgende Verfahren ausführen:

  • Anfordern der Anzahl der in der Auflistung enthaltenen Objekte mit der Count-Eigenschaft.

  • Zurückgeben eines Objekts aus der Auflistung mit der standardmäßigen Item-Methode.

  • Aktualisieren der Objekte in der Auflistung vom Provider mit der Refresh-Methode.


CubeDefs-Auflistung (ADO MD)

CubeDefs-Auflistung

Enthält die CubeDef-Objekte, die einen Cube eines mehrdimensionalen Katalogs darstellen.

Hinweise

CubeDefs ist eine standardmäßige ADO-Auflistung. Mit den Eigenschaften und Methoden einer Auflistung können Sie folgende Verfahren ausführen:

  • Anfordern der Anzahl der in der Auflistung enthaltenen Objekte mit der Count-Eigenschaft.

  • Zurückgeben eines Objekts aus der Auflistung mit der standardmäßigen Item-Methode.

  • Aktualisieren der Objekte in der Auflistung vom Provider mit der Refresh-Methode.


Dimensions-Auflistung (ADO MD)

Dimensions-Auflistung

Enthält die Dimension-Objekte, aus denen ein Cube besteht.

Hinweise

Dimensions ist eine standardmäßige ADO-Auflistung. Mit den Eigenschaften und Methoden einer Auflistung können Sie folgende Verfahren ausführen:

  • Anfordern der Anzahl der in der Auflistung enthaltenen Objekte mit der Count-Eigenschaft.

  • Zurückgeben eines Objekts aus der Auflistung mit der standardmäßigen Item-Methode.

  • Aktualisieren der Objekte in der Auflistung vom Provider mit der Refresh-Methode.


Hierarchies-Auflistung (ADO MD)

Hierarchies-Auflistung

Enthält die von einer Dimension festgelegten Hierarchy-Objekte.

Hinweise

Hierarchies ist eine standardmäßige ADO-Auflistung. Mit den Eigenschaften und Methoden einer Auflistung können Sie folgende Verfahren ausführen:

  • Anfordern der Anzahl der in der Auflistung enthaltenen Objekte mit der Count-Eigenschaft.

  • Zurückgeben eines Objekts aus der Auflistung mit der standardmäßigen Item-Methode.

  • Aktualisieren der Objekte in der Auflistung vom Provider mit der Refresh-Methode.


Levels-Auflistung (ADO MD)

Levels-Auflistung

Enthält die Level-Objekte, aus denen eine Hierarchie besteht.

Hinweise

Levels ist eine standardmäßige ADO-Auflistung. Mit den Eigenschaften und Methoden einer Auflistung können Sie folgende Verfahren ausführen:

  • Anfordern der Anzahl der in der Auflistung enthaltenen Objekte mit der Count-Eigenschaft.

  • Zurückgeben eines Objekts aus der Auflistung mit der standardmäßigen Item-Methode.

  • Aktualisieren der Objekte in der Auflistung vom Provider mit der Refresh-Methode.


Members-Auflistung (ADO MD)

Members-Auflistung

Enthält die Member-Objekte einer Ebene oder Position entlang einer Achse.

Hinweise

Members-Auflistungen werden verwendet, um die folgenden Elementtypen aufzunehmen:

  • Die Elemente, aus denen eine Ebene in einem Cube besteht. Diese sind in der Members-Auflistung eines Level-Objekts enthalten. Beispielsweise sind in der Übersicht über mehrdimensionale Schemas und Daten die vier Elemente auf der Staatenebene Kanada, USA, GB und Deutschland.

  • Die Elemente, bei denen es sich um die untergeordneten Elemente eines bestimmten Elements in der Hierarchie handelt. Diese Elemente werden von der Children-Eigenschaft des übergeordneten Member-Objekts zurückgegeben. Um bei diesem Beispiel zu bleiben: die beiden untergeordneten Elemente von Kanada sind Kanada-Ost und Kanada-West.

  • Die Elemente, die eine bestimmte Position entlang der Achse eines Zellensatzes festlegen. Beispielsweise sind im Zellensatz unter Arbeiten mit mehrdimensionalen Daten die beiden ersten Elemente der ersten Position auf der x-Achse Valentine und Seattle. Diese Elemente sind in der Members-Auflistung eines Position-Objekts enthalten.

Members ist eine standardmäßige ADO-Auflistung. Mit den Eigenschaften und Methoden einer Auflistung können Sie folgende Verfahren ausführen:

  • Anfordern der Anzahl der in der Auflistung enthaltenen Objekte mit der Count-Eigenschaft.

  • Zurückgeben eines Objekts aus der Auflistung mit der standardmäßigen Item-Methode.

  • Aktualisieren der Objekte in der Auflistung vom Provider mit der Refresh-Methode.


Positions-Auflistung (ADO MD)

Positions-Auflistung

Enthält die Position-Objekte, die einen Punkt auf einer Achse festlegen.

Hinweise

Positions ist eine standardmäßige ADO-Auflistung. Mit den Eigenschaften und Methoden einer Auflistung können Sie folgende Verfahren ausführen:

  • Anfordern der Anzahl der in der Auflistung enthaltenen Objekte mit der Count-Eigenschaft.

  • Zurückgeben eines Objekts aus der Auflistung mit der standardmäßigen Item-Methode.

  • Aktualisieren der Objekte in der Auflistung vom Provider mit der Refresh-Methode.


ADO MD-Methoden

Zusammenfassung der Methoden für ADO MD

Methode | Beschreibung
Close | Schließt ein geöffnetes Cellset.
Item | Ruft eine Zelle aus einem Cellset mit Hilfe ihrer Koordinaten ab.
Item | Gibt ein bestimmtes Element einer Auflistung nach Namen oder Ordinalzahl zurück.
Open | Ruft die Ergebnisse einer multidimensionalen Abfrage ab und gibt die Ergebnisse an ein Cellset zurück.
Refresh | Aktualisiert die Objekte in einer Auflistung, um Objekte aufzunehmen, die vom Provider erhältlich oder spezifisch für ihn sind.


Close-Methode (ADO MD)

Close-Methode

Schließt ein geöffnetes Cellset.

Syntax

Cellset.Close

Hinweise

Die Verwendung der Close-Methode zum Schließen eines Cellset-Objekts gibt die zugeordneten Daten frei, einschließlich der Daten in allen verbundenen Cell-, Axis-, Position- oder Member-Objekten. Das Schließen eines Cellset-Objekts entfernt dieses nicht aus dem Speicher. Sie können seine Eigenschaftseinstellungen ändern und es zu einem späteren Zeitpunkt erneut öffnen. Um ein Objekt vollständig aus dem Speicher zu entfernen, setzen Sie die Objektvariable auf Nothing.

Später können Sie die Open-Methode aufrufen, um das Cellset-Objekt mit der gleichen oder einer anderen Quellzeichenfolge erneut zu öffnen. Während das Cellset-Objekt geschlossen wird, wird ein Fehler erzeugt, wenn Eigenschaften abgerufen oder Methoden aufgerufen werden, die einen Verweis auf die zugrundeliegenden Daten oder Metadaten enthalten.


Item-Methode (ADO MD Cellset)

Item-Methode (Cellset)

Ruft eine Zelle aus einem Cellset mit Hilfe ihrer Koordinaten ab.

Syntax

Set Cell = Cellset.Item ( Positions )

Parameter

Positions Ein Variant Array von Werten, die eine Zelle eindeutig angeben. Positions kann einer der folgenden Werte sein:

  • Ein Array von Positionsnummern

  • Ein Array von Mitgliedsnamen

  • Die Ordinalposition

Hinweise

Verwenden Sie die Item-Methode, um ein Cell-Objekt innerhalb eines Cellset-Objekts zurückzugeben. Wenn die Item-Methode die Zelle, die dem Positions-Argument entspricht, nicht finden kann, tritt ein Fehler auf.

Die Item-Methode ist die Standardmethode für das Cellset-Objekt. Die folgenden Syntaxformen sind austauschbar:

Cellset.Item ( Positions )

Cellset ( Positions )

Das Positions-Argument gibt an, welche Zelle zurückgegeben werden soll. Sie können die Zelle über ihre Ordinalposition oder über ihre Position entlang jeder Achse angeben. Wenn Sie die Zelle über ihre Position entlang jeder Achse angeben, können Sie den nummerischen Wert der Position oder die Namen der Mitglieder für jede Position angeben.

Die Ordinalposition ist eine Nummer, die eine Zelle innerhalb des Cellset-Objekts eindeutig identifiziert. Vom Konzept her werden Zellen in einem Cellset-Objekt nummeriert, als ob das Cellset-Objekt ein p-dimensionales Array wäre, wobei p die Anzahl der Achsen darstellt. Zellen werden in aufsteigender Reihenfolge adressiert. Weiter unten finden Sie die Formel zur Berechnung der Ordinalzahl einer Zelle:

Wenn Mitgliedsnamen als Zeichenfolgen an Item übergeben werden, müssen die Mitglieder in aufsteigender Reihenfolge der nummerischen Achsenbezeichner aufgelistet werden. Innerhalb einer Achse müssen die Mitglieder in aufsteigender Reihenfolge der Dimensionsschachtelung aufgelistet werden, d.h., das Mitglied der äußersten Dimension wird zuerst genannt, gefolgt von Mitgliedern der inneren Dimensionen. Jede Dimension sollte durch eine separate Zeichenfolge dargestellt werden, und die Liste der Mitgliederzeichenfolgen sollte durch Kommas getrennt sein.

Anmerkung Das Abrufen von Zellen über den Mitgliedsnamen wird von Ihrem Datenprovider möglicherweise nicht unterstützt. Weitere Informationen erhalten Sie in der Dokumentation Ihres Providers.


Open-Methode (ADO MD)

Open-Methode

Ruft die Ergebnisse einer multidimensionalen Abfrage ab und gibt die Ergebnisse an ein Cellset zurück.

Syntax

Cellset.Open Source, ActiveConnection

Parameter

Source Optional. Ein Variant-Wert, der eine gültige multidimensionale Abfrage ergibt, z.B. eine Multidimensional Expression (MDX)-Abfrage. Das Source-Argument entspricht der Source-Eigenschaft. Weitere Informationen über MDX erhalten Sie in der Microsoft Data Access SDK unter .

ActiveConnection Optional. Ein Variant-Wert, der eine Zeichenfolge ergibt, die entweder einen gültigen Namen einer ADO-Connection-Objektvariable oder eine Definition für eine Verbindung angibt. Das ActiveConnection-Argument gibt die Verbindung an, in der das Cellset-Objekt geöffnet werden soll. Wenn Sie eine Verbindungsdefinition für dieses Argument übergeben, öffnet ADO eine neue Verbindung unter Verwendung der festgelegten Parameter. Das ActiveConnection-Argument entspricht der ActiveConnection-Eigenschaft.

Hinweise

Die Open-Methode erzeugt einen Fehler, wenn einer der Parameter ausgelassen wurde und sein entsprechender Eigenschaftenwert vor dem Versuch, das Cellset-Objekt zu öffnen, nicht festgelegt wurde.


ADO MD-Eigenschaften

ADO MD-Eigenschaft - Zusammenfassung

Eigenschaft | Beschreibung
ActiveConnection | Gibt an, zu welchem ADO Connection-Objekt der aktuelle Zellensatz oder Katalog derzeit gehört.
Caption | Gibt die beim Darstellen eines Level- oder Member-Objekts zu verwendende Textüberschrift an.
ChildCount | Gibt die Anzahl der Elemente an, für die das aktuelle Member-Objekt das übergeordnete Element in der Hierarchie ist.
Children | Gibt eine Members-Auflistung zurück, für die der aktuelle Member das übergeordnete Element in der Hierarchie ist.
Count | Gibt die Anzahl der Objekte in einer Auflistung an.
Depth | Gibt die Anzahl der Ebenen zwischen dem Level und dem Ursprung der Hierarchieebene an.
Description | Gibt eine Texterläuterung des aktuellen Objekts zurück.
DimensionCount | Gibt die Anzahl der Dimensionen auf einer Achse an.
DrilledDown | Gibt an, ob zu einem Element "gewechselt" werden kann.
FilterAxis | Gibt Filterinformationen für den aktuellen Zellensatz an.
FormattedValue | Gibt die formatierte Darstellung eines Zellenwertes an.
LevelDepth | Gibt die Anzahl der Ebenen zwischen dem Ursprung der Hierarchie und einem Element an.
LevelName | Gibt den Ebenennamen eines Elements an.
Name | Gibt den Namen eines Objekts an.
Ordinal (Cell) | Gibt eine Zelle anhand ihrer Position in einem Zellensatz eindeutig an.
Ordinal (Position) | Gibt eine Position entlang einer Achse eindeutig an.
Parent | Gibt das Element an, das dem übergeordneten Element des aktuellen Elements in einer Hierarchie entspricht.
ParentSameAsPrev | Gibt an, ob das übergeordnete Element dieser Position mit dem übergeordneten direkten Vorgängerelement identisch ist.
Source | Gibt die Quelle für die Daten im Zellensatz an.
State | Gibt den aktuellen Status des Zellensatzes an.
Type | Gibt den Typ des aktuellen Elements an.
UniqueName | Gibt einen eindeutigen Namen für das aktuelle Objekt an.
Value | Gibt den Wert der aktuellen Zelle an.


ActiveConnection-Eigenschaft (ADO MD)

ActiveConnection-Eigenschaft

Gibt an, zu welchem ADO Connection-Objekt der aktuelle Zellensatz oder Katalog derzeit gehört.

Einstellungen und Rückgabewerte

Legt einen Wert vom Typ Variant fest, der eine Zeichenfolge mit der Definition für eine Verbindung oder ein Connection-Objekt enthält, oder gibt diesen zurück. Der Standardwert ist eine leere Zeichenfolge.

Hinweise

Sie können diese Eigenschaft auf ein gültiges Connection-Objekt oder auf eine gültige Verbindungszeichenfolge festlegen. Ist diese Eigenschaft auf eine Verbindungszeichenfolge gesetzt, erstellt der Provider ein neues Connection-Objekt mit Hilfe dieser Definition und öffnet die Verbindung.

Wenn Sie das ActiveConnection-Argument der Open-Methode zum Öffnen eines Cellset -Objekts verwenden, übernimmt die ActiveConnection-Eigenschaft den Wert des Arguments.

Das Setzen der ActiveConnection-Eigenschaft eines Catalog-Objekts auf Nothing gibt die zugeordneten Daten frei, einschließlich der Daten in der CubeDefs-Auflistung sowie verbundenen Dimension-, Hierarchy-, Level und Member-Objekten. Das Schließen eines zum Öffnen eines Catalog verwendeten Connection-Objekts hat die gleichen Auswirkungen wie das Setzen der ActiveConnection-Eigenschaft auf Nothing.

Wenn Sie versuchen, die ActiveConnection-Eigenschaft für ein geöffnetes Cellset-Objekt zu ändern, tritt ein Fehler auf.

Anmerkung Beachten Sie beim Arbeiten mit Visual Basic®, das Schlüsselwort Set zu verwenden, wenn Sie die ActiveConnection-Eigenschaft auf ein Connection-Objekt setzen. Wenn Sie das Set-Schlüsselwort weglassen, setzen Sie lediglich die ActiveConnection-Eigenschaft der Standardeigenschaft des Connection-Objekts, ConnectionString, gleich. Der Code wird zwar ausgeführt, jedoch erstellen Sie eine zusätzliche Verbindung zur Datenquelle, wodurch die Leistung bzw. Arbeitsgeschwindigkeit möglicherweise herabgesetzt wird.

Setzen Sie beim Verwenden des MSOLAP-Datenproviders die Datenquelle einer Verbindungszeichenfolge auf einen Servernamen und den Startkatalog auf einen Katalognamen der Datenquelle. Geben Sie als Speicherort die vollständige Pfadangabe zur .CUB-Datei an, um sich mit einer vom Server getrennten Cubedatei zu verbinden. Geben Sie in beiden Fällen für den Provider dessen Namen an. Beispielsweise wird durch die folgende Zeichenfolge eine Verbindung zwischen dem Katalog "Roberts Videoladen" auf einem Server mit der Bezeichnung "Servername" und dem MSOLAP-Provider hergestellt:

"Data Source=Servername;Initial Catalog=Roberts Videoladen;Provider=msolap"

Die folgende Zeichenfolge stellt eine Verbindung zu einer lokalen Cubedatei im Pfad C:\MSDASDK\Beispiel\oledb\olap\daten\robsvid.cub her:

"Location=C:\MSDASDK\Beispiel\oledb\olap\daten\robsvid.cub;Provider=msolap"


Caption-Eigenschaft (ADO MD)

Caption-Eigenschaft

Gibt die beim Darstellen eines Level - oder Member-Objekts zu verwendende Textüberschrift an.

Rückgabewerte

Gibt einen String-Wert zurück und ist schreibgeschützt.


ChildCount-Eigenschaft (ADO MD)

ChildCount-Eigenschaft

Gibt die Anzahl der Elemente an, für die das aktuelle Member-Objekt das übergeordnete Element in der Hierarchie ist.

Rückgabewerte

Gibt einen ganzzahligen Long-Wert zurück und ist schreibgeschützt.

Hinweise

Verwenden Sie die ChildCount-Eigenschaft, um eine ungefähre Angabe über die Anzahl der untergeordneten Elemente von Member zu erhalten. Die tatsächliche Anzahl der untergeordneten Elemente von Member wird mit Hilfe der Children-Eigenschaft zurückgegeben.

Für Member-Objekte eines Position-Objekts kann als maximale Anzahl 65.536 zurückgegeben werden. Liegt die tatsächliche Anzahl der untergeordneten Elemente über diesem Wert, wird dennoch nur der Wert 65536 zurückgegeben. Die Anwendung sollte den ChildCount-Wert "65536" daher als gleich oder größer als 65.536 untergeordnete Elemente interpretieren.

Wenden Sie bei Member-Objekten eines Level-Objekts die Count-Eigenschaft der ADO-Auflistung auf die Children-Auflistung an, um die genaue Anzahl der untergeordneten Elemente zu bestimmen. Das Bestimmen der genauen Anzahl ist möglicherweise zeitintensiv, wenn es sich um eine große Anzahl untergeordneter Elemente in der Auflistung handelt.


Children-Eigenschaft (ADO MD)

Children-Eigenschaft

Gibt eine Members -Auflistung zurück, für die der aktuelle Member das übergeordnete Element in der Hierarchie ist.

Rückgabewerte

Gibt eine Members-Auflistung zurück und ist schreibgeschützt.

Hinweise

Die Children-Eigenschaft enthält eine Members-Auflistung, für die der aktuelle Member das übergeordnete Element in der Hierarchie ist. Member-Objekte auf Blattebene verfügen in der Members-Auflistung über keine untergeordneten Elemente. Diese Eigenschaft wird nur für Member-Objekte unterstützt, die zu einem Level-Objekt gehören. Wird auf diese Eigenschaft von einem zum Position-Objekt gehörenden Member-Objekt aus verwiesen, tritt ein Fehler auf.


Depth-Eigenschaft (ADO MD)

Depth-Eigenschaft

Gibt die Anzahl der Ebenen zwischen dem Level und dem Hierarchieursprung an.

Rückgabewerte

Gibt eine Ganzzahl zurück und ist schreibgeschützt.

Hinweise

Ein Level am Hierarchieursprung weist einen Depth-Wert von null (0) auf.


Description-Eigenschaft (ADO MD)

Description-Eigenschaft

Gibt eine Texterläuterung des aktuellen Objekts zurück.

Rückgabewerte

Gibt einen String-Wert zurück und ist schreibgeschützt.

Hinweise

Bei Member-Objekten bezieht sich Description nur auf Einheiten- und Formelelemente. Für alle anderen Elementtypen gibt Description eine leere Zeichenfolge ("") zurück. Weitere Informationen zu den verschiedenen Elementtypen finden Sie unter Type-Eigenschaft.

Diese Eigenschaft wird nur auf Member-Objekte unterstützt, die zu einem Level-Objekt gehören. Wird auf diese Eigenschaft von einem zum Position-Objekt gehörenden Member-Objekt aus verwiesen, tritt ein Fehler auf.


DimensionCount-Eigenschaft (ADO MD)

DimensionCount-Eigenschaft

Gibt die Anzahl der Dimensionen auf einer Achse an.

Rückgabewerte

Gibt einen ganzzahligen Long-Wert zurück und ist schreibgeschützt.


DrilledDown-Eigenschaft (ADO MD)

DrilledDown-Eigenschaft

Gibt an, ob zu einem Element "gewechselt" werden kann.

Rückgabewerte

Gibt einen Boolean-Wert zurück und ist schreibgeschützt. DrilledDown gibt True zurück, wenn keine untergeordneten Elemente des aktuellen Elements auf der Achse vorhanden sind. DrilledDown gibt False zurück, wenn mindestens ein untergeordnetes Element des aktuellen Elements auf der Achse vorhanden ist.

Hinweise

Verwenden Sie die DrilledDown-Eigenschaft, um zu ermitteln, ob diesem Element mindestens ein untergeordnetes Element direkt auf der Achse folgt. Diese Information ist hilfreich beim Anzeigen von Elementen.

Diese Eigenschaft wird nur auf Member-Objekte unterstützt, die zu einem Position-Objekt gehören. Wird auf diese Eigenschaft von einem zum Level-Objekt gehörenden Member-Objekt aus verwiesen, tritt ein Fehler auf.


FilterAxis-Eigenschaft (ADO MD)

FilterAxis-Eigenschaft

Gibt Filterinformationen zum aktuellen Zellensatz an.

Rückgabewerte

Gibt ein Axis-Objekt zurück und ist schreibgeschützt.

Hinweise

Verwenden Sie die FilterAxis-Eigenschaft, um Informationen über die Dimensionen zurückzugeben, die zum Unterteilen der Daten verwendet wurden. Die DimensionCount-Eigenschaft von Axis gibt die Anzahl der Teildimensionen zurück. Diese Achse verfügt für gewöhnlich nur über eine Zeile.

Die von FilterAxis zurückgegebene Axis ist nicht in der Axes-Auflistung für ein Cellset-Objekt enthalten.


FormattedValue-Eigenschaft (ADO MD)

FormattedValue-Eigenschaft

Gibt die formatierte Darstellung eines Zellenwertes an.

Rückgabewerte

Gibt einen String-Wert zurück und ist schreibgeschützt.

Hinweise

Verwenden Sie die FormattedValue-Eigenschaft, um eine formatierte Wertedarstellung der Value-Eigenschaft eines Cell-Objekts zu erhalten. Ist der Wert einer Zelle beispielsweise 1056,87, wobei der Wert für den Währungsbetrag steht, wird FormattedValue als DM1.056,87 angezeigt.


LevelDepth-Eigenschaft (ADO MD)

LevelDepth-Eigenschaft

Gibt die Anzahl der Ebenen zwischen dem Ursprung der Hierarchie und einem Element an.

Rückgabewerte

Gibt einen ganzzahligen Long-Wert zurück und ist schreibgeschützt.

Hinweise

Verwenden Sie die LevelDepth-Eigenschaft, um die Entfernung zwischen dem Member-Objekt und der Ursprungsebene der Hierarchie bestimmen zu können. Die LevelDepth eines Elements ist auf der Ursprungsebene 0; dies entspricht der Depth-Eigenschaft eines Level-Objekts.


LevelName-Eigenschaft (ADO MD)

LevelName-Eigenschaft

Gibt den Ebenennamen eines Elements an.

Rückgabewerte

Gibt einen String-Wert zurück und ist schreibgeschützt.

Hinweise

Verwenden Sie die LevelName-Eigenschaft, um den Ebenennamen abzurufen, zu dem ein Element gehört. Dies entspricht der Name-Eigenschaft eines Level-Objekts.


Name-Eigenschaft (ADO MD)

Name-Eigenschaft

Gibt den Namen eines Objekts an.

Rückgabewerte

Gibt einen String-Wert zurück und ist schreibgeschützt.

Hinweise

Sie können die Name-Eigenschaft eines Objekts durch einen Ordinalverweis abrufen. Danach können Sie anhand des Namens direkt auf das Objekt verweisen. Wenn beispielsweise cdf.CubeDefs(0).Name "Roberts Videoladen" zurückgibt, können Sie mit cdf.CubeDefs("Roberts Videoladen") auf dieses CubeDef-Objekt verweisen.


Ordinal-Eigenschaft (ADO MD Cell)

Ordinal-Eigenschaft (Cell)

Gibt eine Zelle anhand ihrer Position in einem Zellensatz eindeutig an.

Rückgabewerte

Gibt einen ganzzahligen Long-Wert zurück und ist schreibgeschützt.

Hinweise

Der Ordinalwert einer Zelle stellt einen eindeutigen Bezeichner im Cellset dar. Vom Konzept her werden Zellen in einem Zellensatz nummeriert, als ob es sich bei diesem um ein p-dimensionales Datenfeld handelt, wobei p der Achsenanzahl entspricht. Zellen werden bei null beginnend in aufsteigender Reihenfolge nummeriert. Nachstehend finden Sie die Formel zur Berechnung der Ordinalzahl einer Zelle:

Der Ordinalwert einer Zelle kann mit der Item-Methode des Cellset-Objekts verwendet werden, um Cell direkt abrufen zu können.


Ordinal-Eigenschaft (ADO MD Position)

Ordinal-Eigenschaft (Position)

Gibt eine Position entlang einer Achse eindeutig an.

Rückgabewerte

Gibt einen ganzzahligen Long-Wert zurück und ist schreibgeschützt.

Hinweise

Ordinal eines Position-Objekts entspricht dem Position-Index in einer Positions-Auflistung.

Eine Zelle kann mit Hilfe von Ordinal der Position entlang der einzelnen Achsen direkt abgerufen werden, indem die Item-Methode des Cellset-Objekts verwendet wird.


Parent-Eigenschaft (ADO MD)

Parent-Eigenschaft

Gibt das Element an, das dem übergeordneten Element des aktuellen Elements in einer Hierarchie entspricht.

Rückgabewerte

Gibt ein Member-Objekt zurück und ist schreibgeschützt.

Hinweise

Ein Element auf der obersten Ebene einer Hierarchie (dem Ursprung) verfügt über keine übergeordneten Elemente. Diese Eigenschaft wird nur für Member-Objekte unterstützt, die zu einem Level-Objekt gehören. Wird auf diese Eigenschaft von einem zum Position-Objekt gehörenden Member-Objekt aus verwiesen, tritt ein Fehler auf.


ParentSameAsPrev-Eigenschaft (ADO MD)

ParentSameAsPrev-Eigenschaft

Gibt an, ob das übergeordnete Element dieser Position mit dem übergeordneten direkten Vorgängerelement identisch ist.

Rückgabewerte

Gibt einen Boolean-Wert zurück und ist schreibgeschützt.

Hinweise

Diese Eigenschaft wird nur für Member-Objekte unterstützt, die zu einem Position-Objekt gehören. Wird auf diese Eigenschaft von einem zum Level-Objekt gehörenden Member-Objekt aus verwiesen, tritt ein Fehler auf.


Source-Eigenschaft (ADO MD)

Source-Eigenschaft

Gibt die Quelle für die Daten im Zellensatz an.

Einstellungen und Rückgabewerte

Setzt einen Variant-Wert oder gibt diesen Wert zurück. Bietet Schreib-/Lesezugriff für geschlossene Cellset-Objekte und ist schreibgeschützt für geöffnete Cellset-Objekte. Variant sollte einen gültigen String-Wert enthalten, z. B. eine MDX-Abfrage.


State-Eigenschaft (ADO MD)

State-Eigenschaft

Gibt den aktuellen Status des Zellensatzes an.

Rückgabewerte

Gibt einen ganzzahligen Long-Wert zurück, der die aktuelle Bedingung des Cellset-Objekts angibt, und ist schreibgeschützt. Dabei sind die folgenden Werte gültig:

Konstante | Wert | Beschreibung
adStateClosed | 0 | Cellset ist geschlossen.
adStateOpen | 1 | Cellset ist geöffnet.

Hinweise

In Ihrem Projekt muss ein Verweis auf die ADO-Typbibliothek vorhanden sein, um Konstantennamen verwenden zu können. Weitere Informationen hierzu finden Sie unter Verwenden von ADO mit ADO MD.


Type-Eigenschaft (ADO MD)

Type-Eigenschaft

Gibt den Typ des aktuellen Elements an.

Rückgabewerte

Gibt einen Enum-Wert zurück und ist schreibgeschützt.

Die Type-Eigenschaft kann einen der folgenden Werte aufweisen:

Konstante | Wert | Beschreibung
adMemberlRegular | 1 | Voreinstellung. Das Element stellt eine Instanz einer Geschäftseinheit dar.
adMemberMeasure | 2 | Das Element gehört zur Einheitendimension und stellt eine quantitative Eigenschaft dar.
adMemberFormula | 4 | Das Element wird mit Hilfe eines Formelausdrucks berechnet.
adMemberAll | 8 | Das Element stellt sämtliche Elemente der Ebene dar.
adMemberUnknown | 16 | Der Typ kann nicht festgelegt werden.

Hinweise

Diese Eigenschaft wird nur für Member-Objekten unterstützt, die zu einem Level-Objekt gehören. Wird auf diese Eigenschaft von einem zum Position-Objekt gehörenden Member-Objekt aus verwiesen, tritt ein Fehler auf.


UniqueName-Eigenschaft (ADO MD)

UniqueName-Eigenschaft

Gibt einen eindeutigen Namen für das aktuelle Objekt an.

Rückgabewerte

Gibt einen String-Wert zurück und ist schreibgeschützt.


Value-Eigenschaft (ADO MD)

Value-Eigenschaft

Gibt den Wert der aktuellen Zelle an.

Rückgabewerte

Gibt einen Variant-Wert zurück und ist schreibgeschützt.


ADO MD-Beispiele

Verwenden Sie die folgenden Beispielthemen, um mehr über einige ADO MD-Programmierelemente zu erfahren.

Herstellen einer Verbindung zu einer multidimensionalen Datenquelle

Das Connection-Beispiel zeigt, wie man eine Verbindung mit einem OLAP (Online Analytical Processing)-Datenbankserver oder einer lokalen OLAP-Cubedatei herstellt.

Zugreifen auf ADO MD-Auflistungen

Das CubeDef-Beispiel zeigt, wie man die Namen der Dimensionen eines CubeDef-Objekts innerhalb eines Catalog-Objekts anzeigen kann.

Anfordern eines Cellset

Das Cellset-Beispiel zeigt, wie man eine MDX-Abfrage durchführt, die ein Cellset zurückgibt. Das Beispiel zeigt Überschriften von Mitgliedern und formatierte Werte von Zellen im Cellset an.

Zugreifen auf Zellen

Das Cell-Beispiel zeigt drei Methoden zum Abrufen einer bestimmten Zelle: über die Ordinalposition, über die numerische Achsenposition und über die Mitgliedsnamen.


Connection-Beispiel (ADO MD)

Connection-Beispiel

Der folgende Code zeigt, wie man die ActiveConnection-Eigenschaft mit Hilfe einer Verbindungszeichenfolge festlegt. Dieser Code nimmt an, dass es eine Datenquelle namens "Roberts Video Store" auf dem OLAP-Server namens "Servername" gibt, und verwendet den MSOLAP-Datenprovider.

Dim cat As New ADOMD.Catalog
cat.ActiveConnection = "Data Source=Servername;" + _
    "Initial Catalog=Roberts Video Store;Provider=msolap;"

Der folgende Code zeigt auch, wie man die ActiveConnection-Eigenschaft mit Hilfe einer Verbindungszeichenfolge festlegt. Dieser Code stellt jedoch eine Verbindung zu einer lokalen Cubedatei ohne eine Verbindung zu einem OLAP-Server namens "Servername" her und verwendet den MSOLAP-Datenprovider.

Dim cat As New ADOMD.Catalog
cat.ActiveConnection = _
"Location=C:\MSDASDK\samples\oledb\olap\data\BobsVid.cub;" + _
"Provider=msolap;"

Der folgende Code zeigt, wie man die ActiveConnection-Eigenschaft auf ein ADO-Connection-Standardobjekt festlegt. Ihr Projekt muss für die Verwendung des ADO-Connection-Objekts einen Verweis auf die ADO-Klassenbibliothek enthalten.

Dim cnn  As New ADODB.Connection
Dim cat  As New ADOMD.Catalog
Cnn.Open "Data Source=Servername;" + _
    "Initial Catalog=Roberts Video Store;Provider=msolap;"
Set cat.ActiveConnection = cnn

Anmerkung Denken Sie daran, das Schlüsselwort Set zu verwenden, wenn Sie die ActiveConnection-Eigenschaft auf ein Connection-Objekt festlegen. Wenn Sie das Set-Schlüsselwort auslassen, setzen Sie in Wirklichkeit die ActiveConnection-Eigenschaft gleich der ConnectionString-Standardeigenschaft des Connection-Objekts. Der Code funktioniert; Sie stellen jedoch eine zusätzliche Verbindung zu der Datenquelle her, was sich möglicherweise negativ auf die Leistung auswirken könnte.


CubeDef-Beispiel (ADO MD)

CubeDef-Beispiel

Das folgende Codebeispiel zeigt den Zugriff auf die CubeDefs- und Dimensions-Auflistungen. Es druckt den Namen jeder Dimension in einem Cube. Dieser Code nimmt an, dass es eine Datenquelle namens "Roberts Video Store" auf dem OLAP-Server namens "Servername" gibt.

Dim cat        As New ADOMD.Catalog
Dim cdf        As ADOMD.CubeDef
Dim I            As Integer
cat.ActiveConnection = "Data Source=Servername;" + _
    "Initial Catalog=Roberts Video Store;Provider=msolap;"
Set cdf = cat.CubeDefs("Roberts Video Store")
For i = 0 To cdf.Dimensions.Count - 1
    Debug.Print cdf.Dimensions(i).Name
Next


Cellset-Beispiel (ADO MD)

Cellset-Beispiel

Der folgende Code zeigt, wie man ein Cellset-Objekt öffnet, Überschriften der Members-Auflistung für jede Position druckt und den formatierten Wert des Cell-Objekts druckt. Dieser Code nimmt an, dass es eine Datenquelle namens "Roberts Video Store" auf dem OLAP-Server namens "Servername" gibt.

Dim cat        As New ADOMD.Catalog
Dim cst        As New ADOMD.Cellset
Dim axs        As ADOMD.Axis
Dim I            As Integer
Dim j            As Integer
cat.ActiveConnection = "Data Source=Servername;" + _
    "Initial Catalog=Roberts Video Store;Provider=msolap;"
cst.Source = "SELECT [Product Category].MEMBERS ON ROWS," + _
                            "[Store State].MEMBERS ON COLUMNS" + _
                    "FROM  [Roberts Video Store]" + _
                    "WHERE ([Quantity])"
Set cst.ActiveConnection = cat.ActiveConnection
cst.Open
For i = 0 To cst.Axes(0).Positions.Count - 1
    Debug.Print cst.Axes(0).Positions(i).Members(0).Caption & " ";
    Set axs = cst.Axes(1)
    For j = 0 To axs.Positions.Count - 1
        Debug.Print "     " & axs.Positions(j).Members(0).Caption & _
            " " & cst(i, j).FormattedValue
    Next
Next
cst.Close


Cell-Beispiel (ADO MD)

Cell-Beispiel

Der folgende Code zeigt drei Methoden des Zugriffs auf ein bestimmtes Cell-Objekt. Dieser Code nimmt an, dass es eine Datenquelle namens "Roberts Video Store" auf dem OLAP-Server gibt.

Dim cat        As New ADOMD.Catalog
Dim cst        As New ADOMD.Cellset
Dim cll        As ADOMD.Cell
cat.ActiveConnection = "Data Source=Servername;" + _
    "Initial Catalog=Roberts Video Store;Provider=msolap;"
cst.Source = "SELECT [Product Category].MEMBERS ON ROWS," + _
                            "[Store State].MEMBERS ON COLUMNS" + _
                    "FROM  [Roberts Video Store]" + _
                    "WHERE ([Quantity])"
Set cst.ActiveConnection = cat.ActiveConnection
cst.Open
' Abrufen der Zelle mit Hilfe der Ordinalposition.
Set cll = cst(10)
' Abrufen der Zelle mit Hilfe der numerischen Achsenposition.
Set cll = cst(2,2)
' Abrufen der Zelle mit Hilfe von Mitgliedsnamen.
' Diese Methode wird vom msolap-Provider nicht unterstützt, ist aber
' für Provider enthalten, die den Zugriff auf Zellen über den
' Mitgliedsnamen unterstützen.
' Set cll = cst("Childrens", "New York State")


SID-Eigenschaft (ADOX)

SID-Eigenschaft

Gibt den Sicherheitsbezeichner für eine Gruppe oder ein Benutzerkonto an.

Einstellungen und Rückgabewerte

Legt einen String-Wert fest, der als eindeutiger Bezeichner für die Gruppe oder den Benutzer fungiert.

Hinweise

Der Standardwert ist eine leere Zeichenfolge ("").

Diese Eigenschaft ist bei neuen Objekten, die noch nicht an eine Auflistung angehängt wurden, lesegeschützt und für vorhandene Objekte nicht verfügbar.


ActiveX <Definition>

ActiveX®

Eine Reihe von Technologien, durch die Softwarekomponenten in einer Netzwerkumgebung interaktiv kommunizieren können, unabhängig von der Sprache, in der sie erstellt wurden. ActiveX® basiert auf dem Component Object Model (COM).


ADISAPI <Definition>

ADISAPI

Advanced Data Internet Server Application Programming Interface. Eine ISAPI DLL die Parsing, Automatisierungssteuerung, Datensatzmarshaling sowie MIME-Packaging bietet. Die ADISAPI-Komponente arbeitet über die API, die vom Internet Information Server (IIS) bereitgestellt wird.


Aggregatfunktion

Eine Funktion, wie z. B. Count, Avg und Var, die zum Erstellen einer Abfrage zur Berechnungen von Gesamtsummen verwendet wird. Beim Schreiben von Ausdrücken sowie beim Programmieren können Sie SQL-Aggregatfunktionen (einschließlich den drei obengenannten) und Domänen-Aggregatfunktionen verwenden, um verschiedene Statistiken festzulegen.


Alias <Definition>

Alias

Ein alternativer Name, den Sie einer Spalte oder einem Ausdruck in einer SQL SELECT-Anweisung geben und der kürzer und aussagekräftiger ist. Beispielsweise ist LocVerkauf der Alias in der nachstehenden SELECT-Anweisung: "Select wr-Verkauf as LocVerkauf from VerkaufDB". Ein Alias kann zur dynamischen Zuordnung von Spalten verwendet werden, um Bindungen auf dem DataControl-Objekt zu steuern.


Apartmentthread

Ein Thread, der zum Ausführen der Aufrufe von Komponentenobjekten verwendet wird, die als "Apartmentthreads" konfiguriert wurden. Die einzelnen Objekte "befinden sich in einem Apartment" (Thread), solange das Objekt vorhanden ist. Alle Aufrufe zu diesem Objekt werden auf dem Apartmentthread ausgeführt.


Asynchroner Betrieb

Ein durch Code initiierter Vorgang (z. B. eine Abfrage). Bevor der Vorgang abgeschlossen ist, wird weiterhin Code ausgeführt. Siehe auch Synchroner Betrieb.


Geschäftsobjekt <Definition>

Geschäftsobjekt

Eine ActiveX®-Komponente, die Daten abruft und verarbeitet. Geschäftsobjekte befinden sich in der Regel auf der mittleren Ebene.

Remote Data Service stellt ein standardmäßiges Geschäftsobjekt auf der mittleren Ebene zur Verfügung, RDSServer.DataFactory, das Clientanfragen empfängt und Lese- und Schreibzugriff auf bestimmte Datenquellen verfügbar macht, das aber keine Überprüfungs- oder Geschäftsregellogik enthält.

Sie können benutzerdefinierte Geschäftsobjekte erstellen, die dieselben Funktionen wie RDSServer.DataFactory erfüllen, und außerdem die Geschäftsregeln der Anwendung kapseln.


Geschäftsregel <Definition>

Geschäftsregel

Die Kombination aus Überprüfungen, Anmeldebestätigungen, Suchvorgängen in Datenbanken, Richtlinien und algorithmischen Transformationen, die die Art der Geschäftsabläufe eines Unternehmens bestimmt. Sie wird auch als Geschäftslogik bezeichnet.


Untergeordnetes Element (Child)

Ein untergeordnetes Element ist ein Knoten in einer hierarchischen Struktur, der einen anderen, dem Ursprung näheren Knoten, über sich hat.


Klassenbezeichner (CLSID) <Definition>

CLSID (Klassenbezeichner)

Ein universeller eindeutiger Bezeichner (Universal Unique Identifier, UUID), der eine COM-Komponente erkennt. Jede COM-Komponente hat einen Klassenbezeichner in der Windows-Registrierung, so dass sie von anderen Anwendungen geladen werden kann.


Clientebene <Definition>

Clientebene

Eine logische Ebene, die einen lokalen Computer darstellt.

Die Clientebene ist der Anwendungs- oder Systembereich, der Daten dem Benutzer anzeigt und Eingaben von diesem verarbeitet. Die auch als Frontend bezeichnete Schicht führt keine Datenfunktionen aus; vielmehr fordert der Client je nach Eingabe Daten von einem Server an, formatiert diese und zeigt die entsprechenden Ergebnisse an. Siehe auch Mittlere Ebene und Datenquellenebene.


Component Object Model (COM) <Definition>

Component Object Model (COM)

Eine offene Architektur für die plattformübergreifende Entwicklung von Client/Server-Anwendungen, die auf objektorientierter Technologie basiert. Clients können auf ein Objekt über Schnittstellen zugreifen, die auf dem Objekt implementiert sind. COM ist sprachneutral, so dass in jeder Sprache, in der ActiveX®-Komponenten erstellt werden, auch COM-Anwendungen erstellt werden können.


Komponente <Definition>

Komponente

Eine einzelne Codeeinheit, die auf ActiveX®-Technologien beruht und einen genau angegebenen Satz von Diensten über genau festgelegte Schnittstellen verfügbar macht. Komponenten liefern die Objekte, die Clients während der Laufzeit anfordern. Bei Remote Data Service werden Komponenten auch als Geschäftsobjekte bezeichnet, wenn sie wichtige Logik für die Unterstützung von Geschäftsprozessen enthalten.


Verbindungspools

Eine Leistungsoptimierung, bei der Auflistungen zuvor zugewiesener Ressourcen verwendet werden, wie beispielsweise Objekte oder Datenbankverbindungen. Das sogenannte Pooling ermöglicht eine effizientere Ressourcenzuweisung.


Cursor

Der Mechanismus, der Code zurückgibt und festlegt, wie ADO auf diese Datensätze zugreifen kann und wie diese anschließend verwendet werden können. Cursor steuern die Datensatznavigation, Aktualisierbarkeit von Daten sowie die Sichtbarmachung von Änderungen in der Datenbank seitens anderer Benutzer.


Datenbezogenes Steuerelement <Definition>

Datenbezogenes Steuerelement

Ein Steuerelement, das Daten aus einer Datenbank verwenden kann. Wenn Sie das Steuerelement über das RDS.DataControl-Objekt an eine Datenbank gebunden haben, wird das Steuerelement als ein gebundenes Steuerelement bezeichnet.


Datenprovider

Software mit eigenen Daten, die in Tabellenform Ihrer Anwendung direkt zur Verfügung gestellt werden. Siehe auch Serviceprovider, Servicekomponente.


Datenquelle <Definition>

Datenquelle

Der Name, den Anwendungen verwenden, um eine Verbindung zu einer System-ODBC-Datenquelle anzufordern. Er gibt den Computernamen an und (optional) die Datenbank, auf die der Datenquellenname (Data Source Name, DSN) verweist.

Eine Systemdatenquelle ist eine Datenquelle, die jedem Benutzer des Computers zur Verfügung steht. Bei Datenquellen, die mit einem Webserver verwendet werden, muss es sich um Systemdatenquellen handeln.


DCOM (Distributed Component Object Model) <Definition>

DCOM (Distributed Component Object Model)

Ein Objektprotokoll, über das ActiveX®-Komponenten in einem Netzwerk gegenseitig Daten direkt austauschen können. DCOM ist sprachneutral, so dass in jeder Sprache, in der ActiveX-Komponenten erstellt werden, auch DCOM-Anwendungen erstellt werden können.


Entwurfszeit <Definition>

Entwurfszeit

Die Zeit, in der eine Anwendung in der Entwicklungsumgebung geschrieben wird, indem u. a. Steuerelemente hinzugefügt und Steuermöglichkeiten bzw. Formulareigenschaften implementiert werden. Während der Laufzeit dagegen können Sie mit einer Anwendung interaktiv arbeiten, wie zu einem späteren Zeitpunkt der Benutzer.

Wenn Sie Webseiten schreiben, können Sie während der Entwurfszeit Eigenschaften in den OBJECT-Tags eines Objekts in HTML festlegen. Sie können während der Laufzeit Eigenschaften im Skripterstellungscode setzen (z. B. VBScript).


Nicht verbundenes Recordset

Ein Recordset in einem Clientcache, der keine aktive Verbindung mehr zu einem Server unterhält. Wenn Sie mit der ursprünglichen Datenquelle arbeiten möchten, wie z. B. Aktualisieren von Daten, müssen Sie die Verbindung erneut herstellen.


DLL (Dynamic Link Library) <Definition>

DLL (Dynamic Link Library)

Eine Datei, die eine oder mehrere Funktionen enthält, die getrennt von den sie verwendenden Prozessen kompiliert, verbunden und gespeichert sind. Das Betriebssystem ordnet die DLLs dem Adressraum des abrufenden Prozesses zu, wenn der Prozess beginnt oder während er ausgeführt wird.


Datenquellenebene <Definition>

Datenquellenebene

Eine logische Ebene, die einen Computer darstellt, auf dem ein DBMS ausgeführt wird, z. B. eine SQL Server-Datenbank. Siehe auch Clientebene und Mittlere Ebene.


Dynamische Eigenschaft

Eine für Datenprovider oder den Cursor Service spezielle Eigenschaft. Die Properties-Auflistung eines Objekts werden mit diesen Eigenschaften je nach Bedarf automatisch (dynamisch) gefüllt. Ein Objekt hat keine dynamischen Eigenschaften, bevor es nicht mit einer Datenquelle über einen bestimmten Datenprovider verbunden ist.


Ereignis

Eine von einem Objekt erkannte Aktion, für die Sie einen Antwortcode schreiben können. Ereignisse können u. a. durch Befehlsausführungen, Transaktionsabschlüsse, Recordset-Navigationen, Datenaktualisierungen sowie anderen Aktionen erstellt werden. Auszuführender Code wird dabei den entsprechenden Ereignisbehandlungsroutinen hinzugefügt.


Enkelaggregat (Grandchild)

Aggregate, die mit Werten in Datensätzen eines Kapitels oder mit Datensätzen eines Kapitels aus Kapiteldatensätzen etc. Berechnungen durchführen.


Ereignisbehandlungsroutine

Eine Ereignisbehandlungsroutine enthält möglicherweise Code, der beim Eintreten eines Ereignisses ausgeführt wird.


ISAPI

Internet Server Application Programming Interface. Eine Zusammenstellung verschiedener Funktionen für Internetserver, wie beispielsweise ein Windows NT®-Server der Microsoft® Internet Information Server (IIS) ausführt.


Marshaling <Definition>

Marshaling

Der Verpackungs- und Übertragungsvorgang von Parametern für Schnittstellenmethoden über Thread- oder Prozessgrenzen hinweg.


Remote Data Service <Definition>

Remote Data Service

Eine webbasierte Hochleistungstechnologie, die Möglichkeiten zur Datenbankanbindung sowie zur Veröffentlichung von Unternehmensdaten für Internet- und Intranetanwendungen bietet.


Microsoft Transaction Server <Definition>

Microsoft Transaction Server

Ein komponentenbasiertes Transaktionsverarbeitungssystem zum Entwickeln, Bereitstellen und Verwalten von leistungsstarken, skalierbaren und stabilen Unternehmens-, Internet- und Intranetserveranwendungen. Microsoft® Transaction Server definiert ein Anwendungsprogrammiermodell für die Entwicklung verteilter, komponentenbasierter Anwendungen. Es stellt außerdem eine Laufzeitinfrastruktur zur Verfügung, mit der diese Anwendungen bereitgestellt und verwaltet werden.


Mittlere Ebene <Definition>

Mittlere Ebene

Wird auch als Anwendungsserverebene bezeichnet. Die logische Ebene zwischen einer Benutzeroberfläche bzw. einem Webclient und der Datenbank. Dies ist in der Regel die Schicht, an der sich der Webserver befindet und an der Geschäftsobjekte instanziiert werden. Die mittlere Ebene ist eine Auflistung von Geschäftsregeln und Funktionen, die ausgehend von den empfangenen Daten arbeitet. Dies wird durch Geschäftsregeln erreicht, die sich oft ändern können und aus diesem Grund in Komponenten gekapselt sind, die physisch von der Anwendungslogik getrennt sind. Siehe auch Clientebene und Datenquellenebene.


MIME <Definition>

MIME

Ein Standard, mit dem Binärdaten im Internet veröffentlicht und gelesen werden können. Der Header einer Datei mit Binärdaten enthält den MIME-Typ der Daten, wodurch Clientprogramme (z. B. Webbrowser und Mailanwendungen) darüber informiert werden, dass die Daten anders als reiner Text behandelt werden müssen. Der Header eines Webdokuments mit einer JPEG-Grafik enthält beispielsweise den MIME-Typ, der für dieses JPEG-Dateiformat typisch ist. Dadurch kann ein Browser die Datei mit dem JPEG-Viewer anzeigen, sofern dieser vorhanden ist.


Objektvariable <Definition>

Objektvariable

Eine Variable, die einen Verweis auf ein Objekt enthält. Bei objCustomObject handelt es sich z. B. um eine Variable, die auf ein Objekt des Typs CustomObject zeigt:

Set objCustomObject = ADS1.CreateObject("CustomObject", _
    "http://WebVerkauf")


ODBC (Open Database Connectivity) <Definition>

ODBC (Open Database Connectivity)

Eine standardmäßige Programmiersprachenschnittstelle, die für den Verbindungsaufbau zu zahlreichen Datenquellen verwendet wird. In der Regel wird auf diese Schnittstelle über die Systemsteuerung zugegriffen, in der Datenquellennamen (Data Source Names, DSNs) zugewiesen werden können, um bestimmte ODBC-Treiber zu verwenden.


Parametrisierte Befehle

Ein Befehl mit Parametern, die Werten entsprechen, die von Ihrem Code gesetzt und jeweils zwischen einzelnen Befehlsausführungen geändert werden können. Diese Werte werden mit dem Befehl an den Provider weitergegeben.


Übergeordnetes Element (Parent)

Die steuernde Seite einer Tabellenbeziehung.


Parent-Child-Beziehung

In einer hierarchischen Struktur befindet sich das übergeordnete Element (Parent) eine Ebene über einem oder mehreren direkt mit ihr verbundenen untergeordneten Elementen (Child). Ein untergeordnetes Element muss ein übergeordnetes Element haben und befindet sich eine Ebene unter diesem.


Beständig speichern

Speichern des aktuellen Status eines COM-Objekts in beispielsweise eine Datei oder ein Recordset.


Proxy <Definition>

Proxy

Ein schnittstellenspezifisches Objekt, das die benötigte Parameterverarbeitung und die erforderliche Kommunikation zur Verfügung stellt, damit ein Client ein Anwendungsobjekt aufrufen kann, das in einer anderen Ausführungsumgebung ausgeführt wird, wie z. B. auf einem anderen Thread oder in einem anderen Prozess. Der Proxy befindet sich beim Client und tauscht mit einem entsprechenden Stub, der sich beim aufgerufenen Anwendungsobjekt befindet, Daten aus.


Recordset <Definition>

Recordset

Ein Zeilensatz, der durch ActiveX® Data Objects (ADO) bereitgestellt wird. Es handelt sich dabei um den primären Mechanismus zum Navigieren von Zeilen und Bearbeiten von Daten. Es ist ein Objekt, das einen Satz mit Zeilen sowie die Methoden und Eigenschaften enthält, mit denen Daten abgerufen und aktualisiert werden können.


Rowset <Definition>

Rowset

Ein aus Zeilen bestehender Satz einer Datenbank, bei dem alle Zeilen das gleiche Feldschema aufweisen. Ein Zeilensatz kann alle oder nur einige Tabellenfelder darstellen. Darüber hinaus kann er auch eine virtuelle Tabelle darstellen, die von einer Abfrage oder der Kombination von zwei bzw. mehr Tabellen erstellt wurde.


Laufzeit <Definition>

Laufzeit

Die Zeit, in der eine Anwendung ausgeführt wird. Während der Laufzeit können Sie mit einer Anwendung interaktiv arbeiten. Während der Entwurfszeit hingegen werden Objekte erstellt und deren Entwurf verändert.

Wenn Sie Webseiten schreiben, können Sie während der Entwurfszeit Eigenschaften in den OBJECT-Tags eines Objekts in HTML festlegen. Sie können während der Laufzeit Eigenschaften im Skripterstellungscode setzen (z. B. VBScript).


Servicekomponente

Ein Serviceprovider, der mit Service- und Datenprovidern arbeitet, um den Umfang der Servicefunktionen in Ihren Anwendungen zusätzlich zu erweitern. Siehe auch Datenprovider, Serviceprovider.


Serviceprovider

Software, die einen Dienst einkapselt, indem Daten erstellt und verarbeitet werden, und so den Funktionsumfang in Ihren ADO-Anwendungen erweitern. Der Provider stellt nicht direkt Daten zur Verfügung, sondern vielmehr einen Dienst, wie z. B. eine Abfrageverarbeitung. Der Serviceprovider kann dann die Daten verarbeiten, die ein Datenprovider zur Verfügung gestellt hat. Siehe auch Datenprovider, Servicekomponente.


Einzelthreadsteuerung

Ein Modell, bei dem alle Objekte auf einem einzigen Thread ausgeführt werden.


Stub <Definition>

Stub

Ein schnittstellenspezifisches Objekt, das das benötigte Parametermarshaling und die erforderliche Kommunikation zur Verfügung stellt, damit ein Anwendungsobjekt Aufrufe von einem Client empfangen kann, der in einer anderen Ausführungsumgebung ausgeführt wird, wie z. B. auf einem anderen Thread oder in einem anderen Prozess. Der Stub befindet sich beim Anwendungsobjekt und tauscht mit einem entsprechenden Proxy, der sich bei dem ihn aufrufenden Client befindet, Daten aus.


Synchroner Betrieb

Ein durch Code initiierter Vorgang (z. B. eine Abfrage), der abgeschlossen ist, bevor ein weiterer Vorgang gestartet wird. Siehe auch Asynchroner Betrieb.


Tablegram

Ein proprietäres Datenformat zum Übertragen von Resultsets zum bzw. vom Client.


Variant

Bei der Automatisierung eine Instanz des VARIANT-Datentyps, der zahlreiche unterschiedliche Wertetypen darstellen kann, wie bsp. Ganzzahlen, Fließkomma- und boolesche Werte, Zeichenfolgen, Zeiger etc. Auch ein Datentyp bei Visual Basic.


Webserver <Definition>

Webserver

Ein Computer, der Webdienste und –seiten für Benutzer des Intranets und Internets zur Verfügung stellt. Internet Information Server ist auf dem Webserver installiert, auf dem in der Regel auch serverbasierte Geschäftsobjekte instantiiert werden.